java8 neue sprachfeatures - lambda/streams/default methods/functionalinterfaces

54
Neue Sprachfeatures

Upload: dirk-detering

Post on 26-Jan-2015

112 views

Category:

Technology


4 download

DESCRIPTION

(deutsch) Kurze Einführung in Java8 - neue Sprachfeatures rund um Lambda

TRANSCRIPT

Page 1: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Neue Sprachfeatures

Page 2: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces
Page 3: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

default default methods @@ FunctionalInterfaces

≈≈≈≈ Streams

Page 4: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Feb. 2002Java 1.4

Sep. 2004Java 1.5

Dez. 2006Java 1.6

Jul. 2011Java 1.7

Mär. 2014Java 1.8

• Generics• Varargs• Foreach Loop• Static Imports• Autoboxing--------------------

• Java.util.concurrent

• Switch (Strings)• ARM (try-w-R)• Diamond operator• Multi-Exceptions• Num-Literals------------------------

• NIO2

• invokeDynamic

• Lambdas• Method Refs.• Default Meth.• Functional Ifc

• Stream

t

• Assert-------------

• Regex• NIO• Logging• JAXP• JAAS/JSSE

?--------------------------

• Compiler API• Scripting (JSR223)• JAXB Improvements• JAX-WS• JVM (Performance,...)

Page 5: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Feb. 2002Java 1.4

Sep. 2004Java 1.5

Dez. 2006Java 1.6

Jul. 2011Java 1.7

Mär. 2014Java 1.8

• Generics• Varargs• Foreach Loop• Static Imports• Autoboxing--------------------

• Java.util.concurrent

• Switch (Strings)• ARM (try-w-R)• Diamond operator• Multi-Exceptions• Num-Literals------------------------

• NIO2

• invokeDynamic

• Lambdas• Method Refs.• Default Meth.• Functional Ifc

• Stream

t

• Assert-------------

• Regex• NIO• Logging• JAXP• JAAS/JSSE

?--------------------------

• Compiler API• Scripting (JSR223)• JAXB Improvements• JAX-WS• JVM (Performance,...)

C# 2.0Generics

C# 3.0Extension Methods, Lambdas

Nov. 2007

Page 6: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

@@ FunctionalInterfacesdefault default methods

≈≈≈≈ Streams

Page 7: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

x → x * x

(int a, int b) → a* b

(int a, int b) → { return a * b; }

(a, b) → a* b

Page 8: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

interface Callback {

public int doit(int x);

};

Page 9: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

java.lang.Runnable void run()java.util.concurrent.Callable<V> V call()java.awt.event.ActionListener void actionPerformed(ActionEvent e)java.beans.PropertyChangeListener void propertyChange(PropertyChangeEvent evt)java.io.FileFilter boolean accept(File pathname)java.util.Comparator<T> int compare(T o1, T o2)javax.naming.spi.ObjectFactory Object getObjectInstance(.....)

Page 10: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( new Callback() { public int doit(int x) { return x *x; } });

Page 11: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( new Callback() { public int doit(int x) { return x *x; } });

Page 12: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( new Callback() { public int doit(int x) { return x *x; } });

Page 13: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( (int x) → { return x *x; } );

Page 14: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

(int x) → { return x *x; } );

Page 15: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

(int x) → { return x *x; } );

Page 16: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

(int x) → x *x );

Page 17: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

(int x) → x *x );

Page 18: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

(int x) → x *x );

Page 19: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback(

x → x *x );

Page 20: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( x → x *x );

Page 21: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( new Callback() { public int doit(int x) { return x *x; } });

Page 22: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someThing.addCallback( x → x *x );

Page 23: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

x → x * x;

(int a, int b) → a* b;

(int a, int b) → { return a * b; }

(a, b) → a* b;

Page 24: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

@@ FunctionalInterfacesdefault default methods

≈≈≈≈ Streams

Page 25: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

some.method(Integer::parseInt);

Statische Methode

Page 26: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

someList.forEach(MyClass::instMeth);

someList.forEach( (MyClass e) → e.instMeth() );

Ungebundene Instanz-Methode

Page 27: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

some.method(System.out::println);

some.method(instance::instmethod);

Gebundene Instanz-Methode

Page 28: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

some.method(MyClass::new);

some.method((x) -> new MyClass(x));

Konstruktor

Page 29: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

@@ FunctionalInterfacesdefault default methods

≈≈≈≈ Streams

Page 30: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

Iterator<Point> it = points.iterator();

while(it.hasNext()) { Point p = it.next(); …. ….}

Page 31: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

Stream<Point> it = points.stream();

while(it.hasNext()) { Point p = it.next(); …. ….}

Page 32: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

Stream<Point> it = points.stream();

while(it.hasNext()) { Point p = it.next(); …. ….}

XX

Page 33: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

points.stream() .map(p->p.x) .filter(v-> v > 0) .distinct() .forEach(out::println) ;

Page 34: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

PointPointPointint

PointPointPointint

PointPointPointPointPointPoint

PointPoint

intPoint

intint

Pointint

int

Point

intint

mapmap

filter

distinct

foreach

p p.x→

v v > 0→

out::println

Page 35: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

points.stream() .map(p->p.x) .filter(v-> v > 0) .distinct() .forEach(out::println) ;

Page 36: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

List<Point> points = ….

points.parallelStream() .map(p->p.x) .filter(v-> v > 0) .distinct() .forEach(out::println) ;

Page 37: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

@@ FunctionalInterfacesdefault default methods

≈≈≈≈ Streams

Page 38: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

interface MyInterface {

public int doit(int x);

static int other(int x){ ...some Implementation } };

Page 39: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

interface MyInterface {

public int doit(int x);

default int other(int x){ ...Implementation using this } };

Page 40: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

@@ FunctionalInterfacesdefault default methods

≈≈≈≈ Streams

Page 41: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

@FunctionalInterface interface MyInterface {

public int doit(int x);

};

Page 42: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

package java.util.function

@FunctionalInterface interface Function<T, R> {

R apply(T t);

};

Page 43: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

package java.util.function

@FunctionalInterface interface BiFunction<T, U, R> {

R apply(T t, U u);

};

Page 44: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

package java.util.function

@FunctionalInterface interface Consumer<T> {

void accept(T t);

};

Page 45: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

package java.util.function

@FunctionalInterface interface Supplier<T> {

T get();

};

Page 46: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

package java.util.function

@FunctionalInterface interface Predicate<T> {

boolean test(T t);

};

Page 47: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Consumer<Integer> outp = (i) -> System.out.println(i);

Function<String, Integer> fun = (s) -> s.length();

Supplier<String> value = () -> "Hello";

outp.accept(fun.apply(value.get()));

Page 48: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Consumer<Integer> outp = (i) -> System.out.println(i);

Function<String, Integer> fun = (s) -> s.length();

Supplier<String> value = () -> "Hello";

outp ( fun ( value() ) );

Page 49: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

λλ Lambda-Ausdrücke

MethodMethod::References

default default methods @@ FunctionalInterfaces

≈≈≈≈ Streams

Page 50: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Weiterführendes:

State of the Lambda – Brian Goetz erklärt die Java 8 Features.http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html

Lambda – A peek under the hoodhttp://www.youtube.com/watch?v=C_QbkGU_lqY&noredirect=1Brian Goetz erklärt, wie Lambdas implementiert sind.

Lambda/Streams Tutorial auf AngelikaLanger.comhttp://www.angelikalanger.com/Lambdas/Lambdas.html

Lambda-FAQ von Maurice Naftalinhttp://www.lambdafaq.org

Artikel von Angelika Langer und Klaus Kreft in Java Magazin 10.2013 und 11.2013

Java8 complete feature sethttp://openjdk.java.net/projects/jdk8/features

Page 51: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Weiterführendes:

Netbeans 7.4https://netbeans.org/community/releases/74/

Java 8 Early Accesshttps://jdk8.java.net/download.html

Online Compiler – Try Java 8http://www.tryjava8.com

Java 8 Lambdas in Action (MEAP)Raoul-Gabriel Urma, Mario Fusco, and Alan Mycrofthttp://www.manning.com

Page 52: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

forEachforEach( (Aufmerksamkeit) ( (Aufmerksamkeit) →→ Vielen Dank Vielen Dank ))

Page 53: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces
Page 54: Java8 Neue Sprachfeatures - Lambda/Streams/default Methods/FunctionalInterfaces

Dirk Detering ©2013Version 0.7

Dieses Projekt ist lizensiert als Inhalt der Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Deutschland-Lizenz. Um eine Kopie der Lizenz zu sehen, besuchen Sie http://creativecommons.org/licenses/by-nc-sa/3.0/de/.

Java is a registered trademark of Oracle and/or its affiliates.