Stream API 終端操作のうち条件判定系のanyMatch
allMatch
noneMatch
についてまとめました。
anyMatch:判定(一部合致)
anyMatchメソッドは filter メソッドでも使われる、判定を行うための関数型インターフェースであるPredicate<T>
を引数に取り、boolean(1つでも条件に合致する値があれば true)を返します。条件に合致する値が見つかった時点で処理を終了するので||
と同等です。
anyMatchの使い方
String の Collection から文字列を検索するサンプルです。
List<String> strs = Arrays.asList("hoge", "fuga", "bars"); // ラムダ式 boolean b = strs.stream().anyMatch(s -> s.equals("fuga")); System.out.println(b); // 匿名クラス boolean b = strs.stream().anyMatch(new Predicate<String>() { @Override public boolean test(String t) { return t.equals("fuga"); } }); // 実行結果 true
空Streamの場合は false を返します。特に問題ないですね。
boolean c = Stream.empty().anyMatch(s -> s.equals("fuga")); System.out.println(c); // 実行結果 false
allMatch : 判定(全て合致)
allMatchメソッドは関数型インターフェースであるPredicate<T>
を引数に取り、boolean(全て条件に合致する値であれば true)を返します。条件に合致しない値が見つかった時点で処理を終了するので&&
ど同等です。
allMatchの使い方
String の Collection から文字数を判定するサンプルです。
private static boolean isCheckLength(Stream<String> s) { return s.allMatch(str -> str.length() == 4); } ... List<String> strs = Arrays.asList("hoge", "fuga", "bars"); System.out.println(isCheckLength(strs.stream())); // 実行結果 true
空Streamの場合は true を返します。どうしてこうなった...?
private static boolean isCheckLength(Stream<String> s) { return s.allMatch(str -> str.length() == 4); } ... System.out.println(isCheckLength(Stream.empty())); // 実行結果 true
noneMatch : 判定(全て非合致)
nonMatchメソッドは関数型インターフェースであるPredicate<T>
を引数に取り、boolean(条件に合致する値が一つも無かったら true)を返します。条件に合致する値が見つかった時点で処理を終了します。
noneMatchの使い方
String の Collection から文字列を検索するサンプルです。
List<String> strs = Arrays.asList("hoge", "fuga", "bars"); boolean d = strs.stream().noneMatch(s -> s.equals("foo")); System.out.println(d); // 実行結果 true
空Streamの場合は true を返します。特に問題ないですね。
boolean d = Stream.empty().noneMatch(s -> s.equals("foo")); System.out.println(d); // 実行結果 true
空Streamの判定に関して、anyMatch
とnoneMatch
は分かるんですが、allMatch
が true を返すのはどうしてなんでしょうか。
Predicate<T>
の詳細な使い方は Java8のStream APIの使い方(中間操作編① - filter, map) の filter を参照してください。
関連記事
Java8のforEachを使った繰り返し処理について - TASK NOTES
Java8のStream APIの使い方(Streamの生成編)
Java8のStream APIの使い方(中間操作編① - filter, map)
Java8のStream APIの使い方(中間操作編② - flatMap, distinct, limit, skip)