LoginSignup
1
2

More than 3 years have passed since last update.

【Java】Stream API を使ってListを操作する方法

Last updated at Posted at 2020-12-17

Stream API とは?

Stream APIは Java8 で導入された機能です。配列やCollectionなどの集合体を扱う為のもので、
値の集計やデータを使った処理などが出来る便利なAPIです。
Streamを用いる事で、拡張for文を簡略化することが出来ます。

Streamの使い方

各要素の数をカウントする(count)

public class Sample {
    public static void main(String[] args) {

        List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));

        long count = JS.stream().count();
        System.out.println(count); // 3
    }
}

各要素を条件で判定して抽出する(filter)

以下は、"Angular"を取り除いてリストを表示する処理です。

public class Sample {
    public static void main(String[] args) {

        List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));

        JS.stream()
        .filter(s -> !s.equals("Angular"))
        .forEach(System.out::println); // Vue React
    }
}

要素を並び替える(sorted)

2つ目のsortedメソッドは、引数にComparatorインターフェースのreverseOrderメソッドを指定している為、降順になります。

public class Sample {
    public static void main(String[] args) {

        List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));

        JS.stream()
            .sorted() // 引数を渡していないため昇順になる
            .forEach(System.out::println); // Angular React Vue

        JS.stream()
            .sorted(Comparator.reverseOrder()) // 降順になる
            .forEach(System.out::println); // Vue React Angular
    }
}

要素の条件が全て一致するか(allMatch)

allMatchメソッドは全て一致すれば trueを返します。

public class Sample {
    public static void main(String[] args) {

        List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));

        boolean a = num1.stream()
                .allMatch(b -> b > 10); //すべての要素は10より大きいか
        System.out.println(a); //false

        boolean c = num1.stream()
                .allMatch(d -> d > 1); //すべての要素は1より大きいか
        System.out.println(c); //true
    }
}

要素の条件が1つでも一致するか(anyMatch)

anyMatchメソッドは 1 つでも一致すれば true を返します。

public class Sample {
    public static void main(String[] args) {

        List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));

        boolean a = num1.stream()
                .anyMatch(b -> b > 40); //40より大きい要素はあるか
        System.out.println(a); //false

        boolean c = num1.stream()
                .anyMatch(d -> d > 30); //30より大きい要素はあるか
        System.out.println(c); //true
    }
}

要素の条件が一致するものは1つもないか(noneMatch)

noneMatchメソッドは一致が 1つもない場合に trueを返します。

public class Sample {
    public static void main(String[] args) {

        List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));

        boolean a = num1.stream()
                .noneMatch(b -> b > 7); //7より大きい要素はひとつもないか
        System.out.println(a); //false

        boolean c = num1.stream()
                .noneMatch(d -> d > 40); //40より大きい要素はひとつもないか
        System.out.println(c); //true
    }
}

参照

Interface Stream
Java8 StreamAPI

1
2
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
1
2