0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】Stream APIの終端操作(anyMatch、allMatch、noneMatch)の使い方

Last updated at Posted at 2023-10-26

Stream APIの終端操作(anyMatch、allMatch、noneMatch)の使い方

目次

はじめに

Stream APIの終端操作、anyMatch, allMatch, noneMatchについてまとめてみました。
いずれのメソッドも、引き数にPredicateを指定して、条件に一致するか、しないかをbooleanで戻すメソッドです。
どれがどうなるのか混乱してググることが多かったので整理しました。

anyMatch

Streamの要素のいずれかが引き数に指定したPredicateに一致するかを戻します。
空のStreamの場合はfalseを戻します。

anyMatch.java
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なのはなんで?と思いますがちゃんとした理由があるらしいです。
詳しくはこちら
こんな記事もあります

allMatch.java
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を戻します。

noneMatch.java
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 に詳しく書いてあるので暇なときにでも読んでみてください。
よく使われるメソッドなので、この記事を参考にして使ってみてください。

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?