1. Plan prezentacji
Jak to robie 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 robie dotychczas
Google Guava - podstawy
Google Guava - podsumowanie
1 Plan prezentacji
2 Jak to robie dotychczas
Co z nimi najczciej robisz?
I na prawd byo eleganckie?
3 Google Guava - podstawy
Taki fajny owoc
Po co mi to?
Tworzenie kolekcji
Zanim cokolwiek umiecisz w kolekcji...
Sprawdzanie nulla?
4 Google Guava - podsumowanie
A to tylko 1/10 caej biblioteki!
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
3. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Co z nimi najczciej robisz?
Najczciej chciaby:
Zrobi co na wszystkich elementach
Zrobi co na niekt坦rych elementach
Szybko tworzy kolekjc
Szybko mody鍖kowa kolekcje
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
4. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Co z nimi najczciej robisz?
Najczciej chciaby:
Zrobi co na wszystkich elementach
Zrobi co na niekt坦rych elementach
Szybko tworzy kolekjc
Szybko mody鍖kowa kolekcje
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
5. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Co z nimi najczciej robisz?
Najczciej chciaby:
Zrobi co na wszystkich elementach
Zrobi co na niekt坦rych elementach
Szybko tworzy kolekjc
Szybko mody鍖kowa kolekcje
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
6. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Co z nimi najczciej robisz?
Najczciej chciaby:
Zrobi co na wszystkich elementach
Zrobi co na niekt坦rych elementach
Szybko tworzy kolekjc
Szybko mody鍖kowa kolekcje
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
7. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Wszystko si da - ale czy elegancko?
Wszystko to jest oczywicie 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 robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Wszystko si da - ale czy elegancko?
Wszystko to jest oczywicie 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 robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Wszystko si da - ale czy elegancko?
Wszystko to jest oczywicie 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 robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
11. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Rozwizania kt坦re i tak na pewno stosujesz
Na pewno cho raz napisae...
Klas napakowan funkcjami statycznymi - pomocnik?
Klasy kt坦re maj conajmniej kilka metod pomocniczych do
kolekcji?
Wic czemu nie mie tego w bibliotece? Dobrze przemylanej.
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
12. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Rozwizania kt坦re i tak na pewno stosujesz
Na pewno cho raz napisae...
Klas napakowan funkcjami statycznymi - pomocnik?
Klasy kt坦re maj conajmniej kilka metod pomocniczych do
kolekcji?
Wic czemu nie mie tego w bibliotece? Dobrze przemylanej.
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
13. Plan prezentacji
Jak to robie dotychczas Co z nimi najczciej robisz?
Google Guava - podstawy I na prawd byo eleganckie?
Google Guava - podsumowanie
Rozwizania kt坦re i tak na pewno stosujesz
Na pewno cho raz napisae...
Klas napakowan funkcjami statycznymi - pomocnik?
Klasy kt坦re maj conajmniej kilka metod pomocniczych do
kolekcji?
Wic czemu nie mie tego w bibliotece? Dobrze przemylanej.
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Google Guava
Google Guava zawiera Google Collections
o kt坦rym bd 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Wic po co mi to!?!?
Ok, wic po co ci kolejna biblioteka?
To co trudne, uczy prostym.
To co proste, uczy eleganckim.
Google Collections rozszerza to co znasz z Javy, nie zastpuje
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Wic po co mi to!?!?
Ok, wic po co ci kolejna biblioteka?
To co trudne, uczy prostym.
To co proste, uczy eleganckim.
Google Collections rozszerza to co znasz z Javy, nie zastpuje
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Wic po co mi to!?!?
Ok, wic po co ci kolejna biblioteka?
To co trudne, uczy prostym.
To co proste, uczy eleganckim.
Google Collections rozszerza to co znasz z Javy, nie zastpuje
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Zmniejsz sw坦j WTF/min!
Jedynym dobrym wyznacznikiem jakoci kodu jest WTF/min.
Zmniejsz ten wyznacznik dziki 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz 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 ptla to troch mao aby opanowa
wszystkie problemy z kolekcjami - nie sdzisz?
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Guava jest od Google
jest super fajna i sitana.
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Mam nadziej, 甜e ostatnie slajdy ci nie przekonay.
Bardzo dobrze! Zaczn蝶my zatem z przykadami.
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Tworzenie kolekcji przez Guava
To samo, w Guavie wyglda 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 zadziaa 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Metoda hashCode
Jest konieczna jeli chcemy sensownie korzysta z kolekcji...
Ilu z was pisze j rcznie?
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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
HashCode w Guavie
Mo甜na j, dziki 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
Tradycyjne equals
Skoro m坦wimy o hashcode, to oczywicie 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz w kolekcji...
Google Guava - podsumowanie
Sprawdzanie nulla?
HashCode w Guavie
Mo甜na j, dziki 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz 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 pamitasz, 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 robie dotychczas
Tworzenie kolekcji
Google Guava - podstawy
Zanim cokolwiek umiecisz 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 wyjtek 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 wartoci do super()!
(Dawniej istniao pod nazw Objects.nonNull)
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
31. Plan prezentacji
Jak to robie dotychczas
A to tylko 1/10 caej 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 wyjtkami
usprawnion wsp坦bie甜no
Konrad Ktoso Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
32. Plan prezentacji
Jak to robie dotychczas
A to tylko 1/10 caej 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 robie dotychczas
A to tylko 1/10 caej biblioteki!
Google Guava - podstawy
Google Guava - podsumowanie
Dzikuj 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