最近、Scalaとか関数型プログラミングにも興味持ちはじめています。
そんな中で、Java8がちょっとばかり関数型っぽい機能を取り込んだということで、調べました。
読んだ本
とりあえず本を1冊読みました。
Java8ではじめる「ラムダ式」
主に、Java8で追加されたラムダ式とStream APIに関する本です。
とても分かりやすく説明されているので、Javaの経験がある人であれば、ラムダ式や関数型プログラミングの知識がなくても理解できます。
Java8のインストール
というわけで、ラムダ式について理解したところで、実際に試してみようと思います。
もともとMac OS XにインストールされているJDKは、バージョン6だったので、JDK8をインストールするところからはじめます。
ダウンロードページから、OS X用のJDK 8u11をダウンロードします。
Java SE Development Kit 8 – Downloads
dmgパッケージからインストーラを起動してインストールします。あとは環境変数のJAVA_HOMEを書き換えます。ホームディレクトリの~/.bashrcに追記しておきます。
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home"
Javaのバージョンを確認すると、確かにJava8に切り替わっています。
$ java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
これでインストール完了です。
EclipseをJava8に対応させる。
JDK8がインストールできたら、Eclipseを、Java8に対応させる必要があります。
僕は最近、Eclipseを最新のLunaにアップデートしていました。Lunaのリリースノートには、Java8へのサポートが記載されているので、このまま使えそうです。
Luna | projects.eclipse.org
もし旧バージョンのEclipseを使っている場合は、下記などを参考にJava8の対応をします。
Eclipse4.3(kepler)でJava8が使えるようにする設定方法
自分の環境では、設定画面からJava8のホームディレクトリへのパスだけ通しました。
これでEclipseでラムダ式が解釈されるようになりました!
MavenでJava8を使う
ビルドはMavenからしているので、MavenもJava8に対応させる必要があります。Maven Compiler Pluginで、Java8を使うように設定します。
これは、pom.xmlに設定を追加するだけです。
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
これでMavenのビルド時にもラムダ式が解釈できるようになります!
ラムダ式を使ってHello World
環境が整ったところで、実際にコードを書いていきます。
特に意味はないんですが、ラムダ式らしきものを使って、Hello Worldを表示してみます。
public class App {
public static void main(String[] args) {
Runnable runnable = () -> {
System.out.println("Hello world");
};
runnable.run();
}
}
意味ない感がすごいですが、ラムダ式を無理やり使ってみました。
実行してみます。
$ mvn clean package ; java -jar ./target/app.jar
# ...(略)...
Hello world
確かにHello Worldが表示されます!
そういうわけで、ラムダ式は匿名クラスの書き換えとほとんど同じなんですが、Java8で同時に追加されたStream APIを使って複雑な並列処理をする場合などに、簡潔に記述できるようになるなどのメリットが得られます。