こんにちは。
キャスレーコンサルティング SI(システム・インテグレーション)部の北見です。

Java9については、来年リリースが予定されています。
Java8の新機能の中で目玉機能の一つであった、「java.util.stream」へ新しくメソッドが追加予定となっております。
今回は、新しく追加予定のメソッドについて、試してみたいと思います。

Java9インストール

まずは、Java9のインストールです。
※詳細なインストール手順は割愛させて頂きます。

Java9ダウンロード・インストール

以下のサイトより、環境にあったJDKのダウンロードを行い、「jdk-9-ea+140_windows-x64_bin.exe」を実行しインストールします。
今回インストールしたJDKは、「JDK9 build140」となります。
https://jdk9.java.net/download/

java9_01

環境設定

インストールしたJDKについてパスの設定を行います。
・「コントロールパネル」⇒「システムとセキュリティ」⇒「システム」⇒「システムの詳細設定」⇒「環境変数」を選択し、環境変数の設定画面を表示します。
・「システム環境変数」より「JAVA_HOME」「Path」へ、今回インストールしたJDKのインストール先のパスを設定します。
java9_02

インストールおよび環境設定の確認

コマンドプロンプトにて「java -version」と記載して「Enter」を選択します。
実行結果として、インストールしたJavaのバージョンが表示されれば、インストール、環境設定は完了です。
java9_03

java.util.streamの新機能

Stream機能は、Java8で追加された機能となりますが、
Java9では新しく以下の3つのメソッドが追加予定となっております。

追加予定のメソッド一覧となります。
java9_04
※詳細については、http://download.java.net/java/jdk9/docs/api/index.htmlをご参照ください。

では、各メソッドについて、Java8(Stream不使用)、Java8(Stream使用)、Java9を比較しながら試していきたいと思います。
Streamについては、ラムダ式の使用が前提となっています。

ラムダ式、Streamってなに?という方は、以下のキャスレー技術ブログをご参照ください。
ラムダ式:【初心者向け】今更聞けない?Java8のラムダ式について知ろう!
stream:【初心者向け】Java8 Stream APIについて知ろう

① takeWhile

本メソッドは特定の条件に一致している間のデータを対象とします。
以下のコードは、リスト内の文字列が7文字未満である間のデータを対象に出力します。

Java8では、対象外要素のスキップや取得対象の要素数の特定(条件に一致している間の要素数)を行い処理を行う必要がありました。
Java9では、takeWhileへ対象とする条件(本ケースでは7文字未満)を指定するだけで対象データ(条件一致している間)の処理が可能となりました。
要素数の特定、スキップ処理が不要となるためコードも減り、本メソッドへ条件指定することで、何をしたいのかがより分かり易くなりました。

・Java8 – Stream不使用
java9_05

・Java8 – Stream使用
java9_06

・Java9
java9_07

・実行結果
java9_08

② dropWhile

本メソッドは特定の条件に一致している間のデータを対象外とし、それ以降のデータを対象とします。
以下のコードは、リスト内の文字列が7文字未満である間のデータを対象外とし、それ以降のデータを対象に出力します。

Java8では、対象外要素のスキップや取得対象の要素数の特定(条件に一致するまでの要素数)を行い処理を行う必要がありました。
Java9では、dropWhileへ対象とする条件(本ケースでは7文字以下)を指定するだけで対象データ(条件一致以降)の出力が可能となりました。
takeWhileと同様に要素数の特定、スキップ処理が不要となるためコードも減り、本メソッドへ条件指定することで、何をしたいのかがより分かり易くなりました。

・Java8 – Stream不使用
java9_09

・Java8 – Stream使用
java9_10

・Java9
java9_11

・実行結果
java9_12

③ ofNullable

本メソッドは、対象のデータがnullではない場合は、Streamを返送。nullの場合は、空のStreamを返送します。
以下のコードは、mapの要素よりlistに一致するキー情報がある場合のみ、そのVALUE値を出力しています。
Java8では、null判定を実施する必要がありました。
Java9では、本メソッドを使用することで、該当データが存在する(nullでない)場合のみ処理を行うことができます。
Optionalと同様にnullを安全に使用するためのメソッドと思われます。

・Java8 – Stream不使用
java9_13

・Java8 – Stream使用
java9_14

・Java9
java9_15

・実行結果
java9_16

最後に

今回は、Java9インストール、Streamの新機能について試させて頂きました。
私の現場はJava7のため、ラムダ式、Streamは、ほぼ初めて動かしてみましたが、コード量も削減され、可読性も良くなりました。
現時点で3メソッドのみの追加予定ですが、今後ますます便利になっていくと思います。

次回は、Java9のその他機能について、試してみたいと思います。

ご一読頂き有難うございました。