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

Project Lambda Rising

Avatar for Yuuki Sumida Yuuki Sumida
November 03, 2012
180

Project Lambda Rising

Avatar for Yuuki Sumida

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);