java中List数据根据一个属性分组
时间: 2024-09-10 11:16:04 浏览: 55
在Java中,如果你有一个`List`对象,其中包含某个实现了特定接口或者具有共同属性的对象实例,你可以使用`java.util.stream.Collectors` API 来根据这个属性对它们进行分组。假设你有一个`Person`类,每个`Person`都有`age`属性,你可以这样做:
```java
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Person {
String name;
int age;
// constructor and getters/setters...
}
public class Main {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
// 添加一些Person对象到people列表...
// 使用Collectors.groupingBy方法按年龄分组
Map<Integer, List<Person>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
System.out.println("Grouped by age:");
groupedPeople.forEach((age, group) -> {
System.out.printf("Age %d:\n", age);
group.forEach(person -> System.out.println("- " + person.getName()));
});
}
}
```
在这个例子中,`groupingBy`函数接收一个函数作为参数(这里是`Person::getAge`),该函数从每个元素提取键(在这种情况下就是年龄)。结果是一个`Map`,其中键是年龄,值是具有相同年龄的`Person`对象的列表。
阅读全文