Java9の新機能を試す。今回はStream APIの追加メソッド。
takeWhile(Predicate predicate)
predicateのtestメソッドがtrueを返すまで要素を取得する。
// 1, 2を出力 List.of(1, 2, 3, 4, 5).stream() .takeWhile(i -> i != 3).forEach(System.out::println); // 1, 2, 3, 4を出力 List.of(1, 2, 3, 4, 5).stream() .takeWhile(i -> i != 5).forEach(System.out::println);
dropWhile(Predicate predicate)
takeWhileの逆。
predicateのtestメソッドがtrueを返すまで要素を破棄。
// 3, 4, 5を出力 List.of(1, 2, 3, 4, 5).stream() .dropWhile(i -> i != 3).forEach(System.out::println); // 5を出力 List.of(1, 2, 3, 4, 5).stream() .dropWhile(i -> i != 5).forEach(System.out::println);
takeWhileとdropWhileの注意点
順序付けられていないストリームを扱うときは出力結果が変わるので注意が必要。
// 3, 2, 1, 5, 4 を出力したり // 3, 1 を出力したり毎回異なる Set.of(1, 2, 3, 4, 5).stream() .dropWhile(i -> i != 3).forEach(System.out::println);
ofNullable(T t)
渡される値がnullの場合に要素が0個のストリームを返す。
渡される値がnullではない場合に要素が1個のストリームを返す。
// 0 Stream.ofNullable(null).count(); // 1 Stream.ofNullable("Foo").count();
iterate(T seed, Predicate<? super T> hasNext, UnaryOperator next)
ストリームでfor文と同じことができる。
// 0, 1, 2, 3, 4, 5を出力 Stream.iterate(0, i -> i < 5, i -> i + 1).forEach(System.out::println);