Scala 2.12.0-M4はまだ正式リリースはされていませんが、既に各種バイナリはpublishされており、sbtに次のようにscalaVersionを書いてあげればふつうに使うことができます。
scalaVersion := "2.12.0-M4"
さて、Scala 2.12の一つの目玉がSAM Type(Single Abstract Method Type)変換です。これは、Java 8で可能になった、無名関数を抽象メソッドを一つだけ持つインタフェース型に変換できるようにするものです。また、同時に、invokedynamicを使った実装も入ったことによって、これまで、無名関数一つに付きクラスファイル一つが生成されていた状況が大幅に改善されることになります(M3と同じ部分も多くあると思いますが、せっかくfeature completeになったのであえて書いてみることにしました)。
さて、SAM Typeへの変換ができるようになったので、せっかくなのでJava 8のStream APIを使ってみることにしました。コードは次のような感じです:
試してみて気づいたのですが、SAM Type変換に関して、これが仕様なのかM4時点での制限かはわかりませんが、Stream[String]
に対してmap
メソッドを呼び出す際に、型パラメータString
を明示しないとコンパイルエラーになってしまいました(エラーメッセージをみると、どうもワイルドカード絡みの推論がうまく行っていない気がします)。この辺の罠があるので、現時点でScalaからJava 8 Stream APIを使うのは面倒ですが、推論がうまく行くようになれば実用的に使うことができるのではないかと思います。