java list 对象属性 分组
时间: 2023-08-27 16:03:58 浏览: 122
可以使用 Java 8 中的 Stream API 和 Collectors 工具类来对 List 中的对象按照某个属性进行分组。以下是一个示例代码:
假设有一个 Person 类,包含 id、name、age 三个属性:
```
public class Person {
private int id;
private String name;
private int age;
// 省略 getter 和 setter 方法
}
```
现在有一个 List<Person> persons,需要按照 age 属性进行分组,将同一年龄的人放在同一个 List 中,可以这样写:
```
Map<Integer, List<Person>> result = persons.stream().collect(Collectors.groupingBy(Person::getAge));
```
这行代码的意思是:将 persons 中的元素转化为 Stream,然后使用 Collectors.groupingBy 方法按照 Person::getAge 方法的返回值进行分组,最终得到一个 Map 对象,其中 key 是年龄,value 是同年龄的人的 List。
如果需要按照多个属性进行分组,可以使用 Collectors.groupingBy 方法的重载版本,将多个属性进行拼接,例如:
```
Map<String, List<Person>> result = persons.stream().collect(Collectors.groupingBy(p -> p.getName() + "-" + p.getAge()));
```
这行代码的意思是:将 persons 中的元素转化为 Stream,然后使用 lambda 表达式将 name 和 age 属性进行拼接作为分组的 key,最终得到一个 Map 对象,其中 key 是 name-age 的组合,value 是同组合的人的 List。
阅读全文