1. Plan prezentacji
Jak to robiłeś dotychczas
Google Guava - podstawy
Google Guava - podsumowanie
(Bardziej) eleganckie kolekcje w Java
Google Guava (Collections)
Konrad “Ktoso“ Malawski
www.project13.pl
17 Kwietnia 2010
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
2. Plan prezentacji
Jak to robiłeś dotychczas
Google Guava - podstawy
Google Guava - podsumowanie
1 Plan prezentacji
2 Jak to robiłeś dotychczas
Co z nimi najczęściej robisz?
I na prawdę było eleganckie?
3 Google Guava - podstawy
Taki fajny owoc
Po co mi to?
Tworzenie kolekcji
Zanim cokolwiek umieścisz w kolekcji...
Sprawdzanie nulla?
4 Google Guava - podsumowanie
A to tylko 1/10 całej biblioteki!
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
3. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:
Zrobić coś na wszystkich elementach
Zrobić coś na niektórych elementach
Szybko tworzyć kolekjcę
Szybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
4. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:
Zrobić coś na wszystkich elementach
Zrobić coś na niektórych elementach
Szybko tworzyć kolekjcę
Szybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
5. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:
Zrobić coś na wszystkich elementach
Zrobić coś na niektórych elementach
Szybko tworzyć kolekjcę
Szybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
6. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
Co z nimi najczęściej robisz?
Najczęściej chciałbyś:
Zrobić coś na wszystkich elementach
Zrobić coś na niektórych elementach
Szybko tworzyć kolekjcę
Szybko modyfikować kolekcje
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
7. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 (Collectio
8. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 (Collectio
9. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 (Collectio
10. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
11. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 do
kolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
12. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 do
kolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
13. Plan prezentacji
Jak to robiłeś dotychczas Co z nimi najczęściej robisz?
Google Guava - podstawy I na prawdę było eleganckie?
Google Guava - podsumowanie
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 do
kolekcji?
Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
14. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Google Guava
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
15. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Google Guava
Google Guava zawiera Google Collections
o którym będę dalej opowiadał.
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
16. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
17. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
18. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
19. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
20. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 . m a k e M e A S a n dw i t c h ( ) ;
}
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 (Collectio
21. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
”Guava jest od Google
jest super fajna i słitaśna.”
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
22. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
23. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
24. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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żesz
tworzyć 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 (Collectio
25. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 + ( t a r g e t A r r i v a l D a t e != n u l l ? ←
t a r g e t A r r i v a l D a t e . 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 (Collectio
26. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 (Collectio
27. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Tradycyjne equals
Skoro 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 b o o l e a n 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 )
&& ( t a r g e t A r r i v a l D a t e != n u l l
? t a r g e t A r r i v a l D a t e . equals ( that . ←
targetArrivalDate )
: that . t a r g e t A r r i v a l D a t e == n u l l )
&& lineItems . equals ( that . lineItems ) ;
} else {
return false ;
}
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
28. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
HashCode w Guavie
Można ją, dzięki Guava, troszkę ładniej:
p u b l i c b o o l e a n 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 ) ;
} else {
return false ;
}
}
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
29. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Tradycyjnie...
Czasami chcemy mieć pewność, że nie przyjmiemy null do naszego
obiektu.
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 )
t h r o w new N u l l P o i n t e r E x c e p t i o n ( ) ;
t h i s . banan = banan ;
}
Fuj!
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
30. Taki fajny owoc
Plan prezentacji
Po co mi to?
Jak to robiłeś dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umieścisz w kolekcji...
Google Guava - podsumowanie
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 gdy
znajdzie 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 (Collectio
31. Plan prezentacji
Jak to robiłeś dotychczas
A to tylko 1/10 całej biblioteki!
Google Guava - podstawy
Google Guava - podsumowanie
Guava to nie tylko kolekcje!
Guava pozwala również na:
sprawną pracę z strumieniami
sprawne zamykanie plików
ulepszone ”pakowanie” obiektów
sprawniejszą pracę z wyjątkami
usprawnioną współbieżność
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
32. Plan prezentacji
Jak to robiłeś dotychczas
A to tylko 1/10 całej biblioteki!
Google Guava - podstawy
Google Guava - podsumowanie
Pytania?
http://guava-libraries.googlecode.com/svn/
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
33. Plan prezentacji
Jak to robiłeś dotychczas
A to tylko 1/10 całej biblioteki!
Google Guava - podstawy
Google Guava - podsumowanie
Dziękuję za uwagę!
portfolio: www.project13.pl
blog: www.blog.project13.pl
email: kmalawski@project13.pl
jabber: ktoso@linux.pl
twitter: @ktosopl
Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio