Javaのストリームを使用したGroup Byの方法


以下に、いくつかのシンプルで簡単なコード例を示します。

例1: オブジェクトのリストを特定のプロパティでグループ化する

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person("John", 25),
                new Person("Jane", 30),
                new Person("Tom", 25),
                new Person("Alice", 30)
        );
        Map<Integer, List<Person>> groupedByAge = people.stream()
                .collect(Collectors.groupingBy(Person::getAge));
        System.out.println(groupedByAge);
    }
}
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

この例では、Personオブジェクトのリストを年齢(age)でグループ化しています。groupingByメソッドを使用して、ageプロパティをキーとしてグループ分けし、Map<Integer, List<Person>>として結果を取得しています。

例2: 文字列リストを文字数でグループ化する

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "orange", "kiwi", "grape");
        Map<Integer, List<String>> groupedByLength = fruits.stream()
                .collect(Collectors.groupingBy(String::length));
        System.out.println(groupedByLength);
    }
}

この例では、文字列のリストを文字数でグループ化しています。groupingByメソッドを使用して、Stringオブジェクトのlengthメソッドをキーとしてグループ分けし、Map<Integer, List<String>>として結果を取得しています。

これらのコード例を使用することで、Javaでストリームを使用してGroup Byを実装する方法を学ぶことができます。必要に応じて、オブジェクトやプロパティを適切に置き換えて使用してください。