Java 9 改良された Stream API

Java 9 新特性Java 9 の新機能

Java 9 で改良された Stream API には、ストリーム処理をより簡単にし、コレクタを使用して複雑なクエリを記述できるようにする便利なメソッドがいくつか追加されています。

Java 9 は Stream にいくつかのメソッド(dropWhile、takeWhile、ofNullable)を追加し、iterate メソッドには新しいオーバーロードメソッドを追加しました。

takeWhile メソッド

構文

default Stream<T> takeWhile(Predicate<? super T> predicate)

takeWhile() メソッドは、述語を引数として使用し、述語ステートメントが最初に false を返すまで、指定された Stream のサブセットを返します。最初の値が述語条件を満たさない場合は、空の Stream を返します。

takeWhile() メソッドは、順序付けられた Stream では、先頭からできるだけ多くの要素を返します。順序付けられていない Stream では、先頭から Predicate 条件を満たす要素のサブセットを返します。

例

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty()) .forEach(System.out::print); } }

上記の例では、takeWhile メソッドは空の文字列に遭遇するとループ出力を停止します。実行結果は次のとおりです。

abc

dropWhile メソッド

構文

default Stream<T> dropWhile(Predicate<? super T> predicate)

dropWhile メソッドは takeWhile と逆の働きをします。述語を引数として使用し、述語ステートメントが最初に false を返すまで、指定された Stream のサブセットを返しません。

例

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").dropWhile(s-> !s.isEmpty()) .forEach(System.out::print); } }

上記の例では、dropWhile メソッドは空の文字列に遭遇するとループ出力を開始します。実行結果は次のとおりです。

ef

iterate メソッド

構文

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

このメソッドは、初期シード値を使用して順次(場合によっては無限の)ストリームを作成し、指定された next メソッドを反復適用することができます。指定された hasNext の述語が false を返すと、反復が停止します。

例

java.util.stream.IntStream; public class Tester { public static void main(String[] args) { IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println); } }

実行結果は次のとおりです。

3
6
9

ofNullable メソッド

構文

static <T> Stream<T> ofNullable(T t)

ofNullable メソッドは NullPointerExceptions を防ぐことができ、ストリームをチェックすることで null 値を回避できます。

指定された要素が null でない場合は、その要素を取得して単一要素のストリームを生成します。要素が null の場合は空のストリームを返します。

例

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { long count = Stream.ofNullable(100).count(); System.out.println(count); count = Stream.ofNullable(null).count(); System.out.println(count); } }

実行結果は次のとおりです。

1
0

Java 9 新特性Java 9 の新機能

その他の拡張機能