java se 8 lambda & stream api overview from history

80

Upload: oracle-fusion-middleware

Post on 14-Jul-2015

5.253 views

Category:

Technology


5 download

TRANSCRIPT

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 2

    OracleJavaOracle Corporation

    SAFE HARBOR STATEMENT

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Java SE 8

    Yoshio Terada Java Evangelist Fusion Middleware Oracle Blog : http://yoshio3.com Twitter : @yoshioterada

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 5

    ?!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 6

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 7

    Java SE 8

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 8

    Java SE 8

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 9

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 10

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 11

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 12

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 13

    Java

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 14

    ()

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 15

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 16

    Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 17

    (Graphic by Herb Sutter)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 18

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 19

    Java SE 8

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 20

    40

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    List users = Arrays.asList( new Actor(1, "", "", 33, ""), new Actor(2, "", "", 62, ""), new Actor(3, "", "", 46, ""), new Actor(4, "", "", 58, ""), new Actor(5, "", "", 41, ""), new Actor(6, "", "", 59, ""), new Actor(7, "", "", 67, ""), new Actor(8, "", ", 29, ""), new Actor(9, "", "", 59, "));

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet(); for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } } List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { public int compare(Actor a1, Actor a2) { return Integer.compare(a1.getAge(), a2.getAge()); } }); for (Actor act : sorted) System.out.println(act.getFirstName());

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet(); for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } }

    List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { @Override public int compare(Actor a1, Actor a2) { return Integer.compare(a1.getAge(), a2.getAge()); } }); for (Actor act : sorted) { System.out.println(act.getFirstName()+act.getLastName()); }

    ?

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet();

    for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } } List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { @Override public int compare(Actor a1, Actor a2) { return Integer.compare(a1.getAge(), a2.getAge()); } });

    for (Actor act : sorted) { System.out.println(act.getFirstName()); }

    for for ()

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet(); for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } } List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { @Override public int compare(Actor a1, Actor a2) { return Integer.compare(a1.getAge(), a2.getAge()); } }); for (Actor act : sorted) { System.out.println(act.getFirstName()); }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet(); for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } } List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { @Override public int compare(Actor a1, Actor a2) { return Integer.compare(a1.getAge(), a2.getAge()); } }); for (Actor act : sorted) { System.out.println(act.getFirstName()); }

    40

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JSR- 337 : Java SE 8 & Stream

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    users.stream() .filter(u -> u.getAge() > 40) .sorted((a1, a2) -> Integer.compare( a1.getAge(), a2.getAge())) .forEach(act -> System.out.println(act.getFirstName()));

    40 lter sorted forEach

    Java SE 8

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Java SE 7 Fork/Join

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Set actor = new HashSet(); for (Actor act : users) { if (act.getAge() > 40) { actor.add(act); } }

    List sorted = new ArrayList(actor); Collections.sort(sorted, new Comparator() { @Override public int compare(Actor a1, Actor a2) { return Integer.compare( a1.getAge(), a2.getAge()); } }); for (Actor act : sorted) { System.out.println(act.getFirstName()); }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 33

    import java.util.Arrays; import java.util.List; import java.util.concurrent.ForkJoinPool; public class ParallelSort { public static void main(String[] args) { ParallelSort psort = new ParallelSort(); ForkJoinPool pool = new ForkJoinPool(); List result = psort.sort(pool, user2); for(Actor act : result) System.out.println(act.getFirstName()); } protected List sort(ForkJoinPool pool, List numbers) { return pool.invoke(new MergeSortTask(numbers)); } List user2 = Arrays.asList( new Actor(1, "", "", 33, ""), new Actor(2, "", "", 62, ""), new Actor(3, "", "", 46, ""), new Actor(4, "", "", 58, ""), new Actor(5, "", "", 41, ""), new Actor(6, "", "", 59, ""), new Actor(7, "", "", 67, ""), new Actor(8, "", "", 29, ""), new Actor(9, "", "", 59, ""), new Actor(10, "", "", 33, "")); }

    Fork/Join

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 34

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.RecursiveTask; public class MergeSortTask< T extends Comparable< ? super T>> extends RecursiveTask { private final List list; public MergeSortTask(List list) { this.list = list; } @Override protected List compute() { if (this.list.size() merge(List leftList, List rightList) { int leftIndex = 0; int rightIndex = 0; List result = new ArrayList(); while (true) { if (leftIndex == leftList.size()) { result.addAll( rightList.subList(rightIndex, rightList.size())); return result; } else if (rightIndex == rightList.size()) { result.addAll( leftList.subList(leftIndex, leftList.size())); return result; } Actor leftElement = leftList.get(leftIndex); Actor rightElement = rightList.get(rightIndex); if (leftElement.getAge().compareTo(rightElement.getAge())

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Fork/Join

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JSR- 337 : Java SE 8 & Stream

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    users.stream() .filter(u -> u.getAge() > 40) .sorted((a1, a2) -> Integer.compare(a1.getAge(), a2.getAge())) .forEach(act -> System.out.println(act.getFirstName()));

    users.parallelStream() .filter(u -> u.getAge() > 40) .sorted((a1, a2) -> Integer.compare(a1.getAge(), a2.getAge())) .sequential() .forEach(act -> System.out.println(act.getFirstName()));

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Stream API

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 39

    Java SE 8

    for

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 40

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 41

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    public class Foo { public void bar(int a, int b){

    }

    public Object bar2(Object c)

    {

    }

    }

    42

    Java

    public class Foo2{

    public void bar() public foo(1, 2) }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 43

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 44

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 45

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 46

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 47

    Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 48

    Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 49

    ExecutorService service = ...; service.submit(new Runnable() { @Override public void run() -> { // doSomething(); } });

    () () ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    ExecutorService service = ...; service.submit(() -> doSomething());

    abstract

    Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 51

    Predicate T boolean 1 boolean

    Consumer T void

    Func4on T R 1

    Supplier T

    abstract Java SE 8 43

    Functional()

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 52

    Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JSR- 337 : Java SE 8

    Stream API () Lambda

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Stream API ()

    Stream

    Stream.of()!Stream.empty()!Stream.generate()!list.stream()

    filter!map!mapToInt!flatMap!distinct!sorted!limit!skip

    forEach!forEachOrdered!toArray!reduce!collect!min,max,count!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JSR- 337 : Java SE 8 Stream API a

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Stream

    Stream stream = Stream.of("aaa", "bbb", "ccc , abc);

    List list = Arrays.asList("aaa", "bbb", "ccc", abc); Stream listStream = list.stream();

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Stream API

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(Predicate

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Predicate/Consumer @FunctionalInterface public interface Predicate { boolean test(T t) }

    @FunctionalInterface public interface Consumer{ void accept(T t); }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Stream List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream()

    .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out.println(data); }});

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Lambda ->

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out.println(data); }});

    ->

    ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    (String)

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out.println(data); }});

    ->

    ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    () ()

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out.println(data); }});

    ->

    ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    (return)

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out.println(data); }});

    ->

    ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Lambda

    (String data) -> System.out.println(data)

    System.out::println

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(new Predicate() { public boolean test(String data) { return data.startsWith("a"); }}) .forEach(new Consumer() { public void accept(String data) { System.out::println(data); }});

    ->

    ->

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Lambda Stream API Lambda

    List list = Arrays.asList("aaa", "bbb", "ccc", "abc"); list.stream() .filter(data -> data.startsWith("a)) .forEach(System.out::println);

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 67

    Lambda Lambda Java Lambda Lambda Stream API

    Brien Goetz

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 68

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 69

    Java SE 8 Lambda Stream API

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 70

    Java SE 8

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    71

    Java SE 7 2015 4

    hGp://www.oracle.com/technetwork/jp/java/eol-135779-ja.html

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JDK 8 Lambda aka Closures Language Interop Nashorn

    Parallel operaSons for core

    collecSons APIs Improvements in funcSonality Improved type inference

    JVM enhancements No PermGen limitaSons Performance improvements

    Compiler control & logging JSR 308-AnnotaSons on Java Type NaSve app bundling App Store Bundling tools

    Deployment enhancements JavaFX 8 Public UI Control API Java SE Embedded support Enhanced HTML5 support 3D shapes and aGributes PrinSng

    Limited doPrivilege NSA Suite B algorithm support SNI Server Side support DSA updated to FIPS186-3 AEAD JSSE CipherSuites

    Mission Control Flight Recorder Usage Tracker Advanced Management Console MSI Enterprise JRE Installer

    Java Proles for constrained devices JSR 310-Date & Time APIs Non-Gregorian calendars Unicode 6.1 ResourceBundle BCP47 locale matching GlobalizaSon & Accessibility

    72

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 73

    " Fork/Join

    " Atomic ,

    "

    collec4on.parallelStream() .lter(Objects::nonNull) .forEach(item -> { //benet from Fork/Join });

    65000

    85000

    105000

    125000

    JDK 7u17 JDK 7u40 JDK 8

    Max

    -jOPS

    SPECjbb2013

    40%

    Oracle JDK 7u17 Oracle SPARC T5-2 75658 SPECjbb2013-MulSJVM Max-jOPS, 23334 SPECjbb2013-MulSJVM CriScal-jOPS Oracle JDK 7u40 Oracle SPARC T5-2 81084 SPECjbb2013-MulSJVM Max-jOPS, 39129 SPECjbb2013-MulSJVM CriScal-jOPS Oracle JDK 8 Oracle SPARC T5-2 114492 SPECjbb2013-MulSJVM Max-jOPS, 43963 SPECjbb2013-MulSJVM CriScal-jOPS Source: www.spec.org as of March 10 th 2014 SPEC and the benchmark name SPECjbb are registered trademarks of Standard Performance EvaluaSon CorporaSon (SPEC)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 74

    Java SE 8 Java EE 7

    Java

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    JDK 8 Lambda JSR 310: New Date and Time API Nashorn: JavaScript Interoperability

    JavaFX Enhancements

    8u40 Performance Improvements Density and Resource Management MulS-Language Support Improvements Accessibility Enhancements ConSnued Java SE Advanced Features

    JDK 9 Modularity Jigsaw HTTP 2.0 Lightweight JSON Cloud opSmized JVM ConSnued Java SE Advanced Features Ahead of Time CompilaSon

    8u20 G1 Performance Improvement JVM Performance Improvements Java Mission Control 5.4 Advanced Management Console 1.0 MSI Enterprise JRE Installer

    8u60 Bug Fixes ConSnued Java SE Advanced Features

    2016 2014 2015 2017

    75

    Java SE

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 76

    4 2015 4 14 2015 7 14 2015 10 20 2016 1 19

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    Java Day Tokyo 2015

    Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    201548() www.oracle.co.jp/jdt2015/

    77

  • Copyright 2015, Oracle and/or its aliates. All rights reserved.

    2015 Java 20

    " 30 " 97% PC " 900 " 81 300 JUG

    78

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. 79