Java 8中的Stream API提供了一个方便的方法来对对象进行分组。

假设我们有一个Person类,包含name和age属性:

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

    // constructors, getters and setters
}

我们想按照年龄对Person对象进行分组,并返回一个Map<Integer, List>,其中键是年龄,值是具有相同年龄的Person对象的列表。

使用Java 8的Stream API,可以轻松地实现此操作:

List<Person> people = ... // list of Person objects

Map<Integer, List<Person>> peopleByAge = people.stream()
    .collect(Collectors.groupingBy(Person::getAge));

在这个例子中,我们使用Collectors.groupingBy方法来按照Person对象的年龄属性进行分组。我们提供一个函数引用Person::getAge作为分组依据,它将返回一个整数,表示Person对象的年龄。该方法将返回一个Map<Integer, List>,其中键是年龄,值是具有相同年龄的Person对象的列表。

如果我们想要分组后的值是Person对象的name属性,可以像这样修改代码:

Map<Integer, List<String>> namesByAge = people.stream()
    .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));

在这个例子中,我们使用Collectors.mapping方法来将Person对象的name属性映射为字符串,并使用Collectors.toList方法将它们收集到一个列表中。然后,我们将这个列表作为值传递给groupingBy方法,这将产生一个Map<Integer, List>,其中键是年龄,值是具有相同年龄的Person对象的name属性的列表

java8 分组分组的Value取对象的属性

原文地址: https://www.cveoy.top/t/topic/cxLa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录