guava

33
Plan prezentacji Jak to robileś 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

Upload: konrad-malawski

Post on 15-Jan-2015

1.494 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Guava

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)

Page 2: Guava

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)

Page 3: Guava

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)

Page 4: Guava

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)

Page 5: Guava

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)

Page 6: Guava

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)

Page 7: Guava

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)

Page 8: Guava

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)

Page 9: Guava

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)

Page 10: Guava

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)

Page 11: Guava

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)

Page 12: Guava

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)

Page 13: Guava

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)

Page 14: Guava

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)

Page 15: Guava

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)

Page 16: Guava

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)

Page 17: Guava

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)

Page 18: Guava

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)

Page 19: Guava

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)

Page 20: Guava

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)

Page 21: Guava

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)

Page 22: Guava

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)

Page 23: Guava

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)

Page 24: Guava

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)

Page 25: Guava

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)

Page 26: Guava

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)

Page 27: Guava

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)

Page 28: Guava

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)

Page 29: Guava

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)

Page 30: Guava

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)

Page 31: Guava

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)

Page 32: Guava

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)

Page 33: Guava

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)