ラムダ式を使用してストリームをフィルタリングする方法


  1. 単純なフィルタリング: ストリームの要素を特定の条件に基づいてフィルタリングする場合、filterメソッドを使用します。以下は例です。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(n -> n % 2 == 0)
                                   .collect(Collectors.toList());
System.out.println(evenNumbers); // 出力: [2, 4, 6, 8, 10]

上記の例では、numbersリストから偶数のみをフィルタリングしています。

  1. 複数の条件でのフィルタリング: 複数の条件を組み合わせてストリームをフィルタリングすることもできます。以下は例です。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve");
List<String> filteredNames = names.stream()
                                  .filter(name -> name.startsWith("A") && name.length() > 3)
                                  .collect(Collectors.toList());
System.out.println(filteredNames); // 出力: [Alice]

上記の例では、namesリストから"A"で始まりかつ長さが3より大きい要素のみをフィルタリングしています。

  1. オブジェクトのプロパティでのフィルタリング: ストリームの要素がオブジェクトである場合、オブジェクトの特定のプロパティでフィルタリングすることもできます。以下は例です。
class Person {
    private String name;
    private int age;
    // コンストラクタとゲッター/セッターは省略
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}
List<Person> people = Arrays.asList(
        new Person("Alice", 25),
        new Person("Bob", 30),
        new Person("Charlie", 35)
);
List<Person> filteredPeople = people.stream()
                                    .filter(person -> person.getAge() > 30)
                                    .collect(Collectors.toList());
System.out.println(filteredPeople); // 出力: [Person{name='Charlie', age=35}]

上記の例では、peopleリストから年齢が30より大きい人物のみをフィルタリングしています。

これらはいくつかの基本的なストリームのフィルタリングの例です。ラムダ式を使用したストリーム操作は非常に強力であり、複雑な条件に基づいて要素をフィルタリングすることができます。詳細な操作やその他のストリームメソッドについては、Javaの公式ドキュメントや他のリソースを参照してください。