Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 8 Release Party

Java 8 Release Party

Je länger sich ein neues Release hinzieht, desto höher werden die Erwartungen. Kein Problem für das neue Java 8: Dieses Release stellt die größte Änderung an der Programmiersprache dar seit der Einführung von Generics mit Java 5.

Anlass genug für andrena, in der neuen Niederlassung in Stuttgart eine Launch-Party zu geben und die wichtigsten Neuerungen in Java 8 vorzustellen: Die beiden Software-Ingenieure Marc Philipp und David Burkhart illustrieren in ihrem Vortrag anhand von Live-Demos solche entscheidenden Änderungen wie die Einführung von Lambda-Ausdrücken und die damit einhergehende Erweiterung bestehender APIs im JDK. Mit Hilfe von Lambdas lässt sich kompakter, lesbarer Code schreiben, der häufige Aufgaben, beispielsweise das Suchen in einer Liste von Elementen, stark vereinfacht. Darüber hinaus bietet das neue JDK die Möglichkeit, solche Operationen ohne zusätzlichen Programmieraufwand parallel auszuführen.

Und das ist nur eine der Neuerungen, die Beachtung verdienen. Dazu addieren sich etwa die neue Date-Time-API oder verbesserte Typ-Inferenz.

Marc Philipp

March 18, 2014
Tweet

More Decks by Marc Philipp

Other Decks in Programming

Transcript

  1. FuncConal  Interface   =  Interface  mit  genau  einer  Methode  

      Beispiele:   •  Comparator   •  Runnable   •  Callable   •  FileFilter   20.03.14   Java  8   4  
  2. Lambda-­‐Ausdruck     =  Anonyme  ImplemenCerung  eines  FuncConal  Interface  

      Comparator<Person>  comparator  =  new  Comparator<Person>()  {    @Override    public  int  compare(Person  a,  Person  b)  {      return  a.getNachname().compareTo(b.getNachname());    }   };     Comparator<Person>  comparator     =  (a,  b)  -­‐>  a.getNachname().compareTo(b.getNachname());   20.03.14   Java  8   5  
  3. Lambda-­‐Schreibweise   20.03.14   Java  8   6   Parameterliste

      -­‐>   Body   (Person  a,  Person  b)   -­‐>   {          return  a.getNachname().compareTo(b.getNachname());   }   (a,  b)   -­‐>   {          return  a.getNachname().compareTo(b.getNachname());   }   (a,  b)   -­‐>   a.getNachname().compareTo(b.getNachname())   a   -­‐>   a.getNachname()   ()   -­‐>   a.getNachname()  
  4. Methoden-­‐Referenzen   20.03.14   Java  8   7   Schema

      Beispiel   Äquivalenter   Lambda-­‐Ausdruck   Klasse::staCscheMethode   Math::abs   x  -­‐>  Math.abs(x)   Klasse::instanzMethode   Person::getNachname   p  -­‐>  p.getNachname()   variable::instanzMethode   einePerson::getNachname   ()  -­‐>   einePerson.getNachname()   Klasse::new   Person::new   ()  -­‐>  new  Person()  
  5. Default-­‐Methoden   =  An  Interface  deklarierte  Methode  mit  Default-­‐ ImplemenCerung

        Vorteil:  ImplemenCerungen  müssen  nicht  angepasst  werden     Beispiele:   •  List::sort   •  Iterable::forEach   •  Comparator::reversed   20.03.14   Java  8   8  
  6. @FunctionalInterface   •  AnnotaCon  für  Interfaces   •  Compiler  überprüb,

     ob  das  Interface  genau  eine   abstrakte  Methode  deklariert     Compile-­‐Fehler:   @FunctionalInterface   interface  MyInterface  {    void  firstMethod();    void  secondMethod();   }   20.03.14   Java  8   9   Invalid  '@FuncConalInterface'     annotaCon;  MyInterface  is   not  a  funcConal  interface  
  7. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      13   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Supplier<T>  {      T  get();   }   interface  Function<T,R>  {      R  apply(T  t);   }   interface  Predicate<T>  {      boolean  test(T  t);   }  
  8. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      15   interface  Function<T,R>  {      R  apply(T  t);   }   Function<Person,  String>  function   =  p  -­‐>  p.getNachname();   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Predicate<T>  {      boolean  test(T  t);   }   interface  Supplier<T>  {      T  get();   }  
  9. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      16   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Predicate<T>  {      boolean  test(T  t);   }   Predicate<Person>  predicate   =  p  -­‐>  "Müller".equals(p.getNachname());   interface  Function<T,R>  {      R  apply(T  t);   }   interface  Supplier<T>  {      T  get();   }  
  10. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      17   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Supplier<T>  {      T  get();   }   interface  Predicate<T>  {      boolean  test(T  t);   }   Supplier<Person>  supplier   =  ()  -­‐>  new  Person("Albrecht",  "Müller")   interface  Function<T,R>  {      R  apply(T  t);   }  
  11. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      18   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Predicate<T>  {      boolean  test(T  t);   }   Consumer<Person>  consumer   =  p  -­‐>  personen.add(p);   interface  Function<T,R>  {      R  apply(T  t);   }   interface  Supplier<T>  {      T  get();   }  
  12. Vier  Familien  von  FuncConal  Interfaces   20.03.14   Java  8

      19   interface  Consumer<T>  {      void  accept(T  t);   }   interface  Supplier<T>  {      T  get();   }   interface  Function<T,R>  {      R  apply(T  t);   }   interface  Predicate<T>  {      boolean  test(T  t);   }  
  13. java.util.stream.Stream   20.03.14   Java  8   22   list.stream()

      .filter(…)   .map(…)   .sorted()   .forEach(…)     Bild:  www.flickr.com/photos/ryanwick/2951635488/‎    
  14. java.util.stream.Stream   20.03.14   Java  8   23   Create

      Intermediate   Intermediate   Intermediate   Terminal   •  Lazy  (Aupau  der  Pipeline)   •  Liefert  Stream   Intermediate     •  Stößt  Auswertung  an   •  Liefert  Ergebnis   Terminal  
  15. java.util.stream.Stream   20.03.14   Java  8   25   Stateless

        • Jedes   Element  wird   für  sich   betrachtet   • filter   • map   • reduce   Stateful     • Es  müssen   alle  Elemente   gesamt   betrachtet   werden   • distinct   • sorted   Short-­‐ CircuiCng   • Nicht  alle   Elemente   müssen   betrachtet   werden   • anyMatch   • limit  
  16. java.util.stream.Stream   •  Sicht  auf  die  Daten     – 

    vgl.  Iterator   •  Möglicherweise  unbegrenzt   •  Nur  einmal  verwendbar   •  SequenCell  oder  parallel   20.03.14   Java  8   27  
  17. Stream  Erzeugen   •  collection.stream   •  Stream.generate  (Supplier)  

    •  Stream.iterate(seed,  Function)   •  stream.parallel   •  IntStream.range   •  Random.ints  /  Random.longs  /  Random.doubles   •  pattern.splitAsStream   •  bufferedReader.lines   •  jarFile.stream  /  zipFile.stream   •  Files.walk  /  Files.list  /  Files.lines     20.03.14   Java  8   29  
  18. Abkürzen   • limit   • skip   Konsumieren   • forEach  

    • count   • findFirst   • findAny   PrimiCve   Streams   • mapToInt   • mapToLong   • mapToDouble   20.03.14   Java  8   30   Suchen   • filter   • anyMatch   • allMatch   • noneMatch   Transformieren   • map   • flatMap   • reduce   • collect   SorCeren   • distinct   • sorted   • min   • max  
  19. java.util.stream.Collectors   20.03.14   Java  8   31   • 

    Erzeugt  Liste   •  Varianten:  toSet,  toCollection   toList   •  String-­‐KonkatenaCon   joining     •  Erzeugt    Map<K,  List<V>>   •  Keys  über  Function<K,  V>   groupingBy  
  20. PrimiCve  Streams   20.03.14   Java  8   33  

    • IntStream,  LongStream,  DoubleStream   Interfaces   • min,  max,  sum,  count,  average   SummaryStatistics   • IntSupplier,  IntConsumer,  IntPredicate,   IntFunction   • Long…   • Double…   OperaConen  
  21. 20.03.14   Java  8   34   Error:  SomeExcepCon:  message

           at  ...        at  ...        at  ...        at  ...   Caused  by:  java.lang.NullPointerExcepCon        at  ...        at  ...        at  ...        at  ...   java.uCl.OpConal<T>  
  22. The  Billion  Dollar  Mistake   Tony  Hoare,  Erfinder  von  

    QuickSort,  Turing  Award   Winner:   I  call  it  my  billion-­‐dollar   mistake.  It  was  the  inven7on   of  the  null  reference  in  1965.     Quelle:   h0p://qconlondon.com/london-­‐2009/presentaCon/Null +References%3A+The+Billion+Dollar+Mistake   20.03.14   Java  8   35   Bild:  h0p://en.wikipedia.org/wiki/C._A._R._Hoare  
  23. Problem:  Was  ist  die  SemanCk  von  „null“?   Was  kann

     map.get(key)  ==  null  bedeuten?     Mögliche  Antworten:   •  Der  key  ist  nicht  in  der  map  enthalten.   •  Der  key  ist  enthalten  und  der  zugehörige  Wert  ist   null.   20.03.14   Java  8   36  
  24. java.time   •  Immutable   •  Threadsafe  (auch  Forma0er!)  

    •  Brücken  zur  alten  Welt   – java.util.Date:  from(Instant),  toInstant   – java.util.Calendar:  toInstant   •  Warum  nicht  Joda-­‐Time?   –  h0p://blog.joda.org/2009/11/why-­‐jsr-­‐310-­‐isn-­‐joda-­‐Cme_4941.html   20.03.14   Java  8   39  
  25. java.time   20.03.14   Java  8   40   Maschine

      •  Instant   Menschenlesbar   •  LocalDate   •  LocalTime   •  LocalDateTime   •  Enum:   DayOfWeek   •  Enum:  Month   •  MonthDay   •  Year   •  YearMonth   Mit  Zeitzonen   •  ZonedDateTime   •  OffsetDateTime   •  OffsetTime   java.util.Date   java.util.Calendar  
  26. java.time   20.03.14   Java  8   41   Maschine

      •  Instant   Menschenlesbar   •  LocalDate   •  LocalTime   •  LocalDateTime   •  Enum:   DayOfWeek   •  Enum:  Month   •  MonthDay   •  Year   •  YearMonth   Mit  Zeitzonen   •  ZonedDateTime   •  OffsetDateTime   •  OffsetTime   java.util.Date   java.util.Calendar   Where  possible,  it  is  recommended  to  use  a   simpler  class  without  a  Cme-­‐zone.  The   widespread  use  of  Bme-­‐zones  tends  to  add   considerable  complexity  to  an  applicaCon.  
  27. java.time   20.03.14   Java  8   42   Duration

      • Sekunden   • Nanosekunden   Period   • Jahre   • Monate   • Tage  
  28. Links   Download   •  h0p://www.oracle.com/technetwork/java/javase/downloads/index.html     Eclipse-­‐Support  

    •  h0p://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_(BETA)     JavaDoc   •  h0p://download.java.net/jdk8/docs/api/java/uCl/funcCon/package-­‐summary.html   •  h0p://download.java.net/jdk8/docs/api/java/uCl/stream/package-­‐summary.html   •  h0p://download.java.net/jdk8/docs/api/java/uCl/stream/Stream.html   •  h0p://download.java.net/jdk8/docs/api/java/Cme/package-­‐summary.html   20.03.14   Java  8   43  
  29. 20.03.14   Java  8   44   Take  it  for

     a  spin...   h0p://www.flickr.com/photos/lelik/247277980   David  Burkhart   Mail  [email protected]       Marc  Philipp   Mail  [email protected]   Twi@er  @marcphilipp   Blog  marcphilipp.de