Stream APIの終端操作(anyMatch、allMatch、noneMatch)の使い方
目次
はじめに
Stream APIの終端操作、anyMatch, allMatch, noneMatchについてまとめてみました。
いずれのメソッドも、引き数にPredicateを指定して、条件に一致するか、しないかをbooleanで戻すメソッドです。
どれがどうなるのか混乱してググることが多かったので整理しました。
anyMatch
Streamの要素のいずれかが引き数に指定したPredicateに一致するかを戻します。
空のStreamの場合はfalseを戻します。
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3);
List<Integer> empty = List.of();
boolean a = list.stream().anyMatch(i -> i >= 1);
boolean b = list.stream().anyMatch(i -> i == 1);
boolean c = list.stream().anyMatch(i -> i == 4);
boolean d = empty.stream().anyMatch(i -> i == 1);
System.out.println("すべて一致: " + a);
System.out.println("ひとつ一致: " + b);
System.out.println("一致なし: " + c);
System.out.println("要素なし: " + d);
}
すべて一致: true
ひとつ一致: true
一致なし: false
要素なし: false
allMatch
Streamの要素のすべてが引数に指定したPredicateに一致するかを戻します。
空のStreamの場合はtrueを戻します。
空の場合trueなのはなんで?と思いますがちゃんとした理由があるらしいです。
詳しくはこちら
こんな記事もあります
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3);
List<Integer> empty = List.of();
boolean a = list.stream().allMatch(i -> i >= 1);
boolean b = list.stream().allMatch(i -> i == 1);
boolean c = list.stream().allMatch(i -> i == 4);
boolean d = empty.stream().allMatch(i -> i == 1);
System.out.println("すべて一致: " + a);
System.out.println("ひとつ一致: " + b);
System.out.println("一致なし: " + c);
System.out.println("要素なし: " + d);
}
すべて一致: true
ひとつ一致: false
一致なし: false
要素なし: true
noneMatch
引数で指定されたPredicateに一致する要素がStream内に存在しないかを戻します。
空のStreamの場合はtrueを戻します。
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3);
List<Integer> empty = List.of();
boolean a = list.stream().noneMatch(i -> i >= 1);
boolean b = list.stream().noneMatch(i -> i == 1);
boolean c = list.stream().noneMatch(i -> i == 4);
boolean d = empty.stream().noneMatch(i -> i == 1);
System.out.println("すべて一致: " + a);
System.out.println("ひとつ一致: " + b);
System.out.println("一致なし: " + c);
System.out.println("要素なし: " + d);
}
すべて一致: false
ひとつ一致: false
一致なし: true
要素なし: true
おわりに
Stream APIの終端操作、anyMatch, allMatch, noneMatchを整理しました。
整理してみたら意外とややこしくなかったです、空の時の挙動はしっかりと確認しておいたほうがいいですね。
javadoc に詳しく書いてあるので暇なときにでも読んでみてください。
よく使われるメソッドなので、この記事を参考にして使ってみてください。
参考文献