Trotz Java agil entwickeln David Burkhart, Marc Philipp XP Days Germany 2014
2 The Road to Lambda... Java
3 Java 8 Intro
4 Demo SortierungDemo1-9.java
5 FuncDonal Interface = Interface mit genau einer Methode Beispiele: Comparator Runnable Callable FileFilter
6 Lambda- Ausdruck = Kurzschreibweise einer anonymen ImplemenDerung eines FuncDonal 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());
7 Lambda- Schreibweise 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()
8 Methoden- Referenzen Schema Beispiel Äquivalenter Lambda- Ausdruck Klasse::staDscheMethode 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()
9 Default- Methoden = An Interface deklarierte Methode mit Default- ImplemenDerung Vorteil: ImplemenDerungen müssen nicht angepasst werden Beispiele: List::sort Iterable::forEach Comparator::reversed
10 StaDsche Methoden in Interfaces möglich Beispiel: Comparator.comparing(Person::getNachname);
11 @FunctionalInterface AnnotaDon für Interfaces Compiler überprüb, ob das Interface genau eine abstrakte Methode deklariert Compile- Fehler: @FunctionalInterface interface MyInterface { void firstmethod(); void secondmethod(); Invalid '@FuncDonalInterface' annotadon; MyInterface is not a funcdonal interface
12 Fragen zur Intro?
13 Java 8 java.udl.funcdon Standard FuncDonal Interfaces
14 Vier Familien von FuncDonal Interfaces interface Function<T,R> { R apply(t t); interface Predicate<T> { boolean test(t t); interface Supplier<T> { T get(); interface Consumer<T> { void accept(t t);
15 Frage & Übung zu Supplier interface Function<T,R> { R apply(t t); interface Predicate<T> { boolean test(t t); interface Supplier<T> { T get(); interface Consumer<T> { void accept(t t); SupplierFrage SupplierUebung
16 Übung zu Consumer interface Function<T,R> { R apply(t t); interface Predicate<T> { boolean test(t t); interface Supplier<T> { T get(); interface Consumer<T> { void accept(t t); ConsumerUebung
17 Übung zu Predicate interface Function<T,R> { R apply(t t); interface Predicate<T> { boolean test(t t); interface Supplier<T> { T get(); interface Consumer<T> { void accept(t t); PredicatesUebung
18 Übung zu Function interface Function<T,R> { R apply(t t); interface Predicate<T> { boolean test(t t); interface Supplier<T> { T get(); interface Consumer<T> { void accept(t t); FunctionsUebung
19 Java 8 java.udl.streams R.I.P. For- Loop
20 Demo StreamDemo1Intro.java
21 java.util.stream.stream list.stream().filter( ).map( ).sorted().foreach( ) Bild: www.flickr.com/photos/ryanwick/2951635488/
22 java.util.stream.stream Create Intermediate Intermediate Intermediate Terminal Intermediate Lazy (Auoau der Pipeline) Liefert Stream Terminal Stößt Auswertung an Liefert Ergebnis
23 PrimiDve Streams Interfaces IntStream, LongStream, DoubleStream SummaryStatistics min, max, sum, count, average OperaDonen IntSupplier, IntConsumer, IntPredicate, IntFunction Long Double
24 Übung StreamAufgabe1
25 java.util.stream.stream Stateless Jedes Element wird für sich betrachtet filter map reduce Stateful Es müssen alle Elemente gesamt betrachtet werden distinct sorted Short- CircuiDng Nicht alle Elemente müssen betrachtet werden anymatch limit
26 java.util.stream.stream Sicht auf die Daten vgl. Iterator Möglicherweise unbegrenzt Nur einmal verwendbar SequenDell oder parallel
27 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
28 Suchen filter anymatch allmatch nonematch Transformieren map flatmap reduce collect SorDeren distinct sorted min max Abkürzen limit skip Konsumieren foreach count findfirst findany PrimiDve Streams maptoint maptolong maptodouble
29 java.util.stream.collectors tolist Erzeugt Liste Varianten: toset, tocollection joining String- KonkatenaDon Erzeugt Map<K, List<V>> groupingby Keys über Function<V, K>
30 Übung StreamAufgabe2
31 Java 8 java.udl.opdonal<t> Error: PizzaNotFoundExcepDon: message at... at... at... at... Caused by: java.lang.nullpointerexcepdon at... at... at... at...
32 The Billion Dollar Mistake Tony Hoare, Erfinder von QuickSort, Turing Award Winner: I call it my billion- dollar mistake. It was the inven?on of the null reference in 1965. Quelle: hxp://qconlondon.com/london- 2009/presentaDon/Null +References%3A+The+Billion+Dollar+Mistake Bild: hxp://en.wikipedia.org/wiki/c._a._r._hoare
33 Problem: Was ist die SemanDk 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.
34 Übung OptionalAufgabe
35 Java 8 java.dme Date/Time- API, Versuch #3
36 java.time Immutable Threadsafe (auch Formaxer!) Brücken zur alten Welt java.util.date: from(instant), toinstant java.util.calendar: toinstant Warum nicht Joda- Time? hxp://blog.joda.org/2009/11/why- jsr- 310- isn- joda- Dme_4941.html
37 java.time Maschine Instant java.util.date Menschenlesbar LocalDate LocalTime LocalDateTime Enum: DayOfWeek Enum: Month MonthDay Year YearMonth Mit Zeitzonen ZonedDateTime OffsetDateTime OffsetTime java.util.calendar
38 java.time Maschine Menschenlesbar Mit Zeitzonen Instant java.util.date LocalDate LocalTime LocalDateTime Enum: DayOfWeek Enum: Month MonthDay Year YearMonth ZonedDateTime OffsetDateTime OffsetTime Where possible, it is recommended to use a simpler class without a Dme- zone. The widespread use of Bme- zones tends to add considerable complexity to an applicadon. java.util.calendar
39 java.time Duration Sekunden Nanosekunden Period Jahre Monate Tage
40 Übung DateTimeAufgaben
41 Stoff für einen weiteren Workshop... Java FX 8 Concurrency Verbesserungen (CompletableFuture,...) Nashorn Javascript Engine Java 7 Features, die untergegangen sind: try- with- resources, MulD- Catch NIO2 (java.nio.file.*)
42 Links Download hxp://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse- Support hxp://www.eclipse.org/downloads/java8/ JavaDoc hxp://download.java.net/jdk8/docs/api/java/udl/funcdon/package- summary.html hxp://download.java.net/jdk8/docs/api/java/udl/stream/package- summary.html hxp://download.java.net/jdk8/docs/api/java/udl/stream/stream.html hxp://download.java.net/jdk8/docs/api/java/dme/package- summary.html
43 Take it for a spin... David Burkhart Mail david.burkhart@andrena.de Marc Philipp Mail marc.philipp@andrena.de TwiGer @marcphilipp Blog marcphilipp.de hxp://www.flickr.com/photos/lelik/247277980