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

Project Lambda Rising

Yuuki Sumida
November 03, 2012
170

Project Lambda Rising

Yuuki Sumida

November 03, 2012
Tweet

More Decks by Yuuki Sumida

Transcript

  1. ドーモ、 ドーモ、Java Javaプログラマ=サン。 プログラマ=サン。 – @razon @razon – 岡山 岡山Java

    Javaユーザ会 ユーザ会/ /天領倉敷 天領倉敷Scala Scala – もじゃもじゃしていました もじゃもじゃしていました。
  2. Project Lambdaとは • JSR 335 (Lambda Expressions for the Java

    Programming Language) – Lambda Expressions – Method Reference – Interface Default Implementation
  3. Project Lambdaとは • Not lexical closure var i = 5

    val f = (x: Int) => x + i println(f(5)) # 10 i = 10 println(f(5)) # 15
  4. インストール • http://jdk8.java.net/lambda/ • IDE – Netbeans 8 Nightly Builds

    with experimental Lambda support (http://bertram2.netbeans.org:8080/job/jdk8lambda/lastSuccessfulBuild/artifact/nbbuild/) – IDEA 12 EAP with experimental Lambda support (http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP) – Eclipse?ナンコラー!スッゾコラー!
  5. 使いかた // Before list.stream().filter(new Predicate<Integer>() { public boolean op(Integer i)

    { return 100 < i; } }); // After list.stream().filter(i -> 100 < i);
  6. Syntax • Lambda Expressions (T1 p1, T2 p2, T3 p3...)

    -> {expression} // ex1 I x = (int a, int b, int c) -> {return a + b + c;}; // ex2 I x = a -> a + 1;
  7. Syntax • Method Reference public interface I { public int

    m(String s); } I i1 = s -> s.length(); I i2 = String::length;
  8. Syntax • Interface Default Implementation public interface I { public

    int m1(int a, int b, int c); public int m2() default M2.m2; public int m3() default { return 1; }; } public class M2 { public static int m2(I i){ return 0; } }
  9. 使用例 • コレクションの高階関数 List<Integer> list = ...; list .stream() .filter(i

    -> Math.abs(i) < 100) .map(i -> String.valueOf(i)) .reduce((s1, s2) -> s1 + s2);