SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Contenu connexe

Plus de Konrad Malawski

Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka Streams
Konrad Malawski
 

Plus de Konrad Malawski (20)

Akka Typed (quick talk) - JFokus 2018
Akka Typed (quick talk) - JFokus 2018Akka Typed (quick talk) - JFokus 2018
Akka Typed (quick talk) - JFokus 2018
 
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in'tScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
 
State of Akka 2017 - The best is yet to come
State of Akka 2017 - The best is yet to comeState of Akka 2017 - The best is yet to come
State of Akka 2017 - The best is yet to come
 
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYCBuilding a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
 
Akka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming WorldAkka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming World
 
Reactive integrations with Akka Streams
Reactive integrations with Akka StreamsReactive integrations with Akka Streams
Reactive integrations with Akka Streams
 
Not Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabsNot Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabs
 
Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!
 
End to End Akka Streams / Reactive Streams - from Business to Socket
End to End Akka Streams / Reactive Streams - from Business to SocketEnd to End Akka Streams / Reactive Streams - from Business to Socket
End to End Akka Streams / Reactive Streams - from Business to Socket
 
The Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOneThe Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOne
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016
 
Krakow communities @ 2016
Krakow communities @ 2016Krakow communities @ 2016
Krakow communities @ 2016
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
 
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
 
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
 
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
 
How Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM EcosystemHow Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM Ecosystem
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
 
Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka Streams
 
2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
 

Guava

  • 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