Java - 特定の条件でリストをフィルタリングする3つの方法

リストの要素の中で特定の条件を満たさない要素は、リストでフィルタリングする方法を紹介します。

1. List.removeIf() を使った方法

removeIf() は引数としてラムダ式を受け取り、リストのすべての要素に対して条件を満たせばリストから要素を削除します。

以下の例では、リストには正と負の数があり、 removeIf()で負の数を削除しました。 この方法は元のリストが変更されるという特徴があります。元のリストを保存する必要がある場合、この方法は使用できません。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(-2, -1, 0, 1, 2));

        list.removeIf((n) -> n < 0);
        System.out.println(list);
    }
}

Output:

[0, 1, 2]

2. for文を利用した方法

以下のように、繰り返しステートメントを使用してリスト内のすべての要素を巡回しながら、条件に一致する要素のみを新しいリストに保存できます。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example1 {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(-2, -1, 0, 1, 2));

        List<Integer> filtered = new ArrayList<>();
        for (Integer n : list) {
            if (n >= 0) {
                filtered.add(n);
            }
        }
        System.out.println(filtered);
    }
}

Output:

[0, 1, 2]

3. Streamを利用した方法

forステートメントと同じように、Streamを使用して要素をフィルタリングして新しいリストに保存できます。ストリームで filter()collect() を使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example2 {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(-2, -1, 0, 1, 2));

        List<Integer> filtered = list.stream()
                .filter((n) -> n >= 0)
                .collect(Collectors.toList());
        System.out.println(filtered);
    }
}

Output:

[0, 1, 2]
codechachaCopyright ©2019 codechacha