OracleがJava 7 と Java 8のJSRを発表

http://www.infoq.com/jp/news/2010/11/oracle-java-jsr

JSR 336, Java 7のピックアップ

  • switch文での文字列, switch 文で文字列リテラルが使える
  • マルチcatch,1つのcatch ブロックで複数の例外タイプが扱えるようになる
  • リソース付きのtry, 自動的に「リソース」(AutoCloseableを実装するもので、IOストリームを含む)をクローズする手段を提供する

JSR 337, Java 8のピックアップ

  • JSR 335, あるいは、Java言語の Lambda式

期待

JSR 336は、コードがスッキリするんだろうな。
JSR 337は、念願のLambda式。

Lambda式って

Lambda式とは?
http://itpro.nikkeibp.co.jp/article/COLUMN/20100222/344923/?ST=develop&P=3


無名関数が宣言できたり

#()( 10 )

#()( new Date() )

#()( new ArrayList<Integer>() )

#()( {1, 2, 3} )

#(int x)( x + x )

#(int x, int y)( x * y )

#(long time)( new Date(time) )

#(int x) {
    return x + x;
}


関数型が宣言できたり

// 宣言
#void(String) logger = #(String message) {
    System.out.println(message);
}
// 実行
logger.("Hello, World!");  // Hello, World!が標準出力に出力される


例外も書けたり...

#String(String)(throws IOException) fileReader = #(String filename) {
        ...
    throw IOException();
        ...
    return ...;
}


これが

List<String> data = ...;

Collections.sort(data,
                 new Comparator<String>() {
                     public int compare(String a, String b) {
                         return a.length() - b.length();
                     }
                 });

こうできたり...

List<String> data = ...;

Collections.sort(data,
                 #(String a, String b)( a.length() - b.length() ));

つまり、スッキリするワケだ。
魔術的w