際際滷

際際滷Share a Scribd company logo
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

More Related Content

Guava

  • 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