java liststream根据对象中的某个属性分组
时间: 2023-11-08 09:03:57 浏览: 43
可以使用Java 8中的Stream的groupingBy()方法来根据对象中的某个属性分组。例如,假设我们有一个包含Person对象的List:
```
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", "Smith", 25));
people.add(new Person("Bob", "Johnson", 30));
people.add(new Person("Charlie", "Brown", 35));
people.add(new Person("David", "Davis", 40));
```
我们可以使用Stream的groupingBy()方法来根据这些人的年龄分组:
```
Map<Integer, List<Person>> peopleByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
这将返回一个Map,其中键是人的年龄,值是与该年龄相对应的人的列表。我们可以使用它来打印每个年龄组中的人:
```
for (Map.Entry<Integer, List<Person>> entry : peopleByAge.entrySet()) {
int age = entry.getKey();
List<Person> peopleInAgeGroup = entry.getValue();
System.out.println("Age group " + age + ":");
for (Person person : peopleInAgeGroup) {
System.out.println(" " + person.getFirstName() + " " + person.getLastName());
}
}
```
这将输出:
```
Age group 25:
Alice Smith
Age group 30:
Bob Johnson
Age group 35:
Charlie Brown
Age group 40:
David Davis
```
注意,groupingBy()方法返回一个Collector,它将流元素分组到一个Map中。Map的键是分组函数的结果,而值是一个List,其中包含所有具有相同分组函数结果的元素。在上面的示例中,分组函数是Person::getAge,它返回每个人的年龄。