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

Java 8 @ ObjektForum

Java 8 @ ObjektForum

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, ein ObjektForum zu diesem Thema stattfinden zu lassen 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.

Der Vortrag bietet nun die Möglichkeit, diverse wichtige Änderungen in kurzer & kompakter Form kennen zu lernen und zu diskutieren. Natürlich ist für Fragen und den direkten Austausch extra Zeit eingeplant.

Marc Philipp

April 07, 2014
Tweet

More Decks by Marc Philipp

Other Decks in Programming

Transcript

  1. FuncAonal  Interface   =  Interface  mit  genau  einer  Methode  

      Beispiele:   •  Comparator   •  Runnable   •  Callable   •  FileFilter   08.04.14   Java  8   4  
  2. Lambda-­‐Ausdruck     =  Anonyme  ImplemenAerung  eines  FuncAonal  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());   08.04.14   Java  8   5  
  3. Lambda-­‐Schreibweise   08.04.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   08.04.14   Java  8   7   Schema

      Beispiel   Äquivalenter   Lambda-­‐Ausdruck   Klasse::staAscheMethode   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-­‐ ImplemenAerung

        Vorteil:  ImplemenAerungen  müssen  nicht  angepasst  werden     Beispiele:   •  List::sort   •  Iterable::forEach   •  Comparator::reversed   08.04.14   Java  8   8  
  6. @FunctionalInterface   •  AnnotaAon  für  Interfaces   •  Compiler  überprü`,

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

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

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

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

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

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

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

      Intermediate   Intermediate   Intermediate   Terminal   •  Lazy  (Aunau  der  Pipeline)   •  Liefert  Stream   Intermediate     •  Stößt  Auswertung  an   •  Liefert  Ergebnis   Terminal  
  15. java.util.stream.Stream   08.04.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-­‐ CircuiAng   • 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   •  SequenAell  oder  parallel   08.04.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     08.04.14   Java  8   29  
  18. Abkürzen   • limit   • skip   Konsumieren   • forEach  

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

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

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

           at  ...        at  ...        at  ...        at  ...   Caused  by:  java.lang.NullPointerExcepAon        at  ...        at  ...        at  ...        at  ...   java.uAl.OpAonal<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:   hwp://qconlondon.com/london-­‐2009/presentaAon/Null +References%3A+The+Billion+Dollar+Mistake   08.04.14   Java  8   35   Bild:  hwp://en.wikipedia.org/wiki/C._A._R._Hoare  
  23. Problem:  Was  ist  die  SemanAk  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.   08.04.14   Java  8   36  
  24. java.time   •  Immutable   •  Threadsafe  (auch  Formawer!)  

    •  Brücken  zur  alten  Welt   – java.util.Date:  from(Instant),  toInstant   – java.util.Calendar:  toInstant   •  Warum  nicht  Joda-­‐Time?   –  hwp://blog.joda.org/2009/11/why-­‐jsr-­‐310-­‐isn-­‐joda-­‐Ame_4941.html   08.04.14   Java  8   39  
  25. java.time   08.04.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   08.04.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  Ame-­‐zone.  The   widespread  use  of  Bme-­‐zones  tends  to  add   considerable  complexity  to  an  applicaAon.  
  27. java.time   08.04.14   Java  8   42   Duration

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

    •  hwp://www.eclipse.org/downloads/java8/     JavaDoc   •  hwp://download.java.net/jdk8/docs/api/java/uAl/funcAon/package-­‐summary.html   •  hwp://download.java.net/jdk8/docs/api/java/uAl/stream/package-­‐summary.html   •  hwp://download.java.net/jdk8/docs/api/java/uAl/stream/Stream.html   •  hwp://download.java.net/jdk8/docs/api/java/Ame/package-­‐summary.html   08.04.14   Java  8   43  
  29. 08.04.14   Java  8   44   Take  it  for

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