Java Stream分组返回对象中的某个值的List教程

引言

在Java开发中,使用Stream进行数据处理是一种非常高效和方便的方式。在实际开发中,有时候我们需要对一组对象进行分组,并获取每组对象中的某个值的集合。本教程将向你展示如何通过Java Stream实现这一功能。

教程步骤

第一步:准备数据对象

首先,我们需要创建一个数据对象,以便后续进行分组操作。假设我们有一个Person类,该类包含nameage两个属性。

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and setters
}

第二步:创建测试数据

接下来,我们创建一组Person对象作为测试数据。

List<Person> people = Arrays.asList(
    new Person("Alice", 25),
    new Person("Bob", 30),
    new Person("Alice", 28),
    new Person("Bob", 27)
);

第三步:使用Java Stream进行分组并返回某个值的List

现在,我们使用Java Stream对people进行分组,并返回每个分组中name的集合。

Map<String, List<Person>> groupedPeople = people.stream()
    .collect(Collectors.groupingBy(Person::getName));

上述代码通过groupingBy方法对people进行分组,按照name属性进行分组,并将结果存储在groupedPeople中。

第四步:获取每个分组中的age集合

最后,我们遍历groupedPeople,获取每个分组中age的集合。

Map<String, List<Integer>> ageListByGroup = groupedPeople.entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        entry -> entry.getValue().stream()
            .map(Person::getAge)
            .collect(Collectors.toList())
    ));

上述代码首先将groupedPeople转换为Stream,然后通过map操作获取每个Person对象的age属性,最后通过collect方法将age集合返回。

结论

通过本教程,你学会了如何使用Java Stream对对象进行分组,并返回某个值的集合。这种方法简洁高效,可以帮助你在实际开发中处理复杂的数据操作。希望本教程对你有所帮助!

erDiagram
    PERSON {
        string name
        int age
    }

引用形式的描述信息

  • Java 8 中的 Stream API:[Oracle Documentation](
  • Java 8 中的 Collectors 类:[Oracle Documentation](
  • Java 8 中的 Function 接口:[Oracle Documentation](