Java 9ストリームAPI拡張:takeWhile、dropWhile、iterate、ofNullable
ストリームはJava 8で導入され、オブジェクトのシーケンスから集約操作を行うのを支援します。Java 9では、ストリームをより使いやすくするいくつかのメソッドが追加されました。
takeWhile(Predicate)
構文
default Stream<T> takeWhile(Predicate<? super T> predicate)
takeWhileは、述語がfalseを返すまでのすべての値を取得します。順序付きストリームの場合、与えられた述語に一致する要素の最長プレフィックスで構成されるストリームを返します。
例
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);
}
}
出力
abc
takeWhileはa、b、cを取得し、空文字列で述語がfalseになった時点で停止します。
dropWhile(Predicate)
構文
default Stream<T> dropWhile(Predicate<? super T> predicate)
dropWhileは、述語がtrueを返すまでの先頭の値を捨てます。順序付きストリームの場合、与えられた述語に一致する最長プレフィックスをドロップした後の残りの要素で構成されるストリームを返します。
例
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);
System.out.println();
Stream.of("a","b","c","","e","","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print);
}
}
出力
ef ef
最初の例ではa,b,cをドロップし、空文字列以降を取得。2つ目も同様。
iterate(述語付き)
構文
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
iterateメソッドにhasNext述語パラメータが追加され、述語がfalseを返すとループ停止します。
例
import 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
3から開始、10未満の間、3ずつ増加。
ofNullable
構文
static <T> Stream<T> ofNullable(T t)
ofNullableメソッドは、NullPointerExceptionを防ぎ、ストリームの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); // 1
count = Stream.ofNullable(null).count();
System.out.println(count); // 0
}
}
Java
- Java演算子をマスター:種類、構文、実践例
- Javaコメント:種類、使い方、ベストプラクティス
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
- Java 9(JDK 9)の主要機能とメリット
- Java 9プロセスAPIの改善:ProcessHandleで詳細情報取得