java8stream流分组提取属性
时间: 2023-11-18 16:56:06 浏览: 38
Java 8中的Stream API提供了一种方便的方法来对集合进行操作。其中之一是分组和提取属性。下面是一个例子,假设我们有一个Person类,其中包含姓名和年龄两个属性。我们想要将这些人按照年龄分组,并提取他们的姓名。可以使用Stream的groupingBy和mapping方法来实现这个目标。代码如下:
```
public 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;
}
}
public class StreamTest {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 25)
);
Map<Integer, List<String>> result = people.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.mapping(Person::getName, Collectors.toList())));
System.out.println(result);
}
}
```
在这个例子中,我们首先创建了一个Person类,然后创建了一个包含四个人的列表。接下来,我们使用Stream的groupingBy方法按照年龄对人进行分组。在这个方法中,我们使用Person::getAge作为分组依据。然后,我们使用mapping方法来提取每个人的姓名,并将结果收集到一个列表中。最后,我们将结果存储在一个Map中,并将年龄作为键,姓名列表作为值。输出结果为:{20=[Alice, Charlie], 25=[David], 30=[Bob]}。