guava
DESCRIPTION
TRANSCRIPT
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
(Bardziej) eleganckie kolekcje w JavaGoogle Guava (Collections)
Konrad “Ktoso“ Malawskiwww.project13.pl
17 Kwietnia 2010
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
1 Plan prezentacji
2 Jak to robiłeś dotychczasCo z nimi najczęściej robisz?I na prawdę było eleganckie?
3 Google Guava - podstawyTaki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
4 Google Guava - podsumowanieA to tylko 1/10 całej biblioteki!
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:Zrobić coś na wszystkich elementachZrobić coś na niektórych elementachSzybko tworzyć kolekjcęSzybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:Zrobić coś na wszystkich elementachZrobić coś na niektórych elementachSzybko tworzyć kolekjcęSzybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:Zrobić coś na wszystkich elementachZrobić coś na niektórych elementachSzybko tworzyć kolekjcęSzybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:Zrobić coś na wszystkich elementachZrobić coś na niektórych elementachSzybko tworzyć kolekjcęSzybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Wszystko się da - ale czy elegancko?
Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek.jednak...
Czy twój kod jest elegancki?
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Wszystko się da - ale czy elegancko?
Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek.jednak...
Czy twój kod jest elegancki?
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Wszystko się da - ale czy elegancko?
Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek.jednak...
Czy twój kod jest elegancki?
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Rozwiązania które i tak na pewno stosujesz
Na pewno choć raz napisałeś...Klasę napakowaną funkcjami statycznymi - ”pomocnik”?Klasy które mają conajmniej kilka metod pomocniczych dokolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Rozwiązania które i tak na pewno stosujesz
Na pewno choć raz napisałeś...Klasę napakowaną funkcjami statycznymi - ”pomocnik”?Klasy które mają conajmniej kilka metod pomocniczych dokolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Co z nimi najczęściej robisz?I na prawdę było eleganckie?
Rozwiązania które i tak na pewno stosujesz
Na pewno choć raz napisałeś...Klasę napakowaną funkcjami statycznymi - ”pomocnik”?Klasy które mają conajmniej kilka metod pomocniczych dokolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Google Guava
Taki tam fajny owoc.Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Google Guava
Google Guava zawiera Google Collectionso którym będę dalej opowiadał.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
”Więc po co mi to!?!?”
Ok, więc po co ci ”kolejna biblioteka”?To co trudne, uczyń prostym.To co proste, uczyń eleganckim.Google Collections rozszerza to co znasz z Javy, nie zastępuje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
”Więc po co mi to!?!?”
Ok, więc po co ci ”kolejna biblioteka”?To co trudne, uczyń prostym.To co proste, uczyń eleganckim.Google Collections rozszerza to co znasz z Javy, nie zastępuje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
”Więc po co mi to!?!?”
Ok, więc po co ci ”kolejna biblioteka”?To co trudne, uczyń prostym.To co proste, uczyń eleganckim.Google Collections rozszerza to co znasz z Javy, nie zastępuje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Zmniejsz swój WTF/min!
Jedynym dobrym wyznacznikiem jakości kodu jest WTF/min.Zmniejsz ten wyznacznik dzięki Guava!
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
I tak jest nieźle - od 1.5 mamy ”for each”
”Ale przecież mamy fantastyczną foreach od Javy 1.5!!!”
f o r ( Sudo sudo : sudos ) {Sudo . makeMeASandwitch ( ) ;
}
Super! Jednak jedna pętla to trochę mało aby opanowaćwszystkie problemy z kolekcjami - nie sądzisz?
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
”Guava jest od Googlejest super fajna i słitaśna.”
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Mam nadzieję, że ostatnie slajdy cię nie przekonały.Bardzo dobrze! Zacznijmy zatem z przykładami.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Brzydkie tworzenie kolekcji
Map<String , List<String>> map =new HashMap<String , List<String >>() ;
Musisz przepisać ten koszmar Genericsów...
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Tworzenie kolekcji przez Guava
To samo, w Guavie wygląda tak:
Map<String , List<String>> mapOfLists = Maps . newHashMap ( ) ;
Korzysta z kilku sztuczek i odrobiny magii... Analogicznie możesztworzyć każdą kolekcję.
Map<String , List<String>> mapOfLists = new HashMap <>() ;
Powyższy fragment kodu zadziała dopiero w Java 7 - tymczasem,mamy Guava.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Metoda hashCode
Jest konieczna jeśli chcemy sensownie korzystać z kolekcji...Ilu z was pisze ją ręcznie?
p u b l i c i n t hashCode ( ) {i n t result = 0 ;result = 31 ∗ result + ( address != n u l l ? address .←↩
hashCode ( ) : 0) ;result = 31 ∗ result + ( targetArrivalDate != n u l l ? ←↩
targetArrivalDate . hashCode ( ) : 0) ;result = 31 ∗ result + lineItems . hashCode ( ) ;r e t u r n result ;
}
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
HashCode w Guavie
Można ją, dzięki Guava, napisać tak:
p u b l i c i n t hashCode ( ) {r e t u r n Objects . hashCode ( address , targetArrivalDate , ←↩
lineItems ) ;}
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Tradycyjne equalsSkoro mówimy o hashcode, to oczywiście musimy również napisaćequals:(Koszmarne siedlisko sprawdzania czy null oraz porównań...)
p u b l i c boo l ean equals ( Object o ) {i f ( o i n s t a n c e o f Order ) {
Order that = ( Order ) o ;
r e t u r n ( address != n u l l? address . equals ( that . address ): that . address == n u l l )
&& ( targetArrivalDate != n u l l? targetArrivalDate . equals ( that .←↩
targetArrivalDate ): that . targetArrivalDate == n u l l )
&& lineItems . equals ( that . lineItems ) ;} e l s e {
r e t u r n f a l s e ;}
}Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
HashCode w Guavie
Można ją, dzięki Guava, troszkę ładniej:
p u b l i c boo l ean equals ( Object o ) {i f ( o i n s t a n c e o f Order ) {
Order that = ( Order ) o ;
r e t u r n Objects . equal ( address , that . address )&& Objects . equal ( targetArrivalDate , that .←↩
targetArrivalDate )&& Objects . equal ( lineItems , that . lineItems ) ;
} e l s e {r e t u r n f a l s e ;
}}
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Tradycyjnie...
Czasami chcemy mieć pewność, że nie przyjmiemy null do naszegoobiektu.O ile o tym w ogóle pamiętasz, zrobisz prawdopodobnie kilka ifów.
p u b l i c Sklep ( Banan banan ) {i f ( banan==n u l l )
throw new NullPointerException ( ) ;
t h i s . banan = banan ;}
Fuj!
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanie
Taki fajny owocPo co mi to?Tworzenie kolekcjiZanim cokolwiek umieścisz w kolekcji...Sprawdzanie nulla?
Preconditions.checkNotNull w Guavie
Zamiast osobno sprawdzać czy mamy do czynienia z null,zwracamy obiekt przez checkNotNull - rzuci on wyjątek za nas gdyznajdzie nulla!
p u b l i c Sklep ( Banan banan ) {t h i s . banan = Preconditions . checkNotNull ( banan ) ;
}
To świetne do przekazywania wartości do super()!(Dawniej istniało pod nazwą Objects.nonNull)
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanieA to tylko 1/10 całej biblioteki!
Guava to nie tylko kolekcje!
Guava pozwala również na:sprawną pracę z strumieniamisprawne zamykanie plikówulepszone ”pakowanie” obiektówsprawniejszą pracę z wyjątkamiusprawnioną współbieżność
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanieA to tylko 1/10 całej biblioteki!
Pytania?http://guava-libraries.googlecode.com/svn/
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)
Plan prezentacjiJak to robiłeś dotychczasGoogle Guava - podstawy
Google Guava - podsumowanieA to tylko 1/10 całej biblioteki!
Dziękuję za uwagę!portfolio: www.project13.plblog: www.blog.project13.plemail: [email protected]
jabber: [email protected]: @ktosopl
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collections)