java8怎么把list集合通过map分组
时间: 2023-07-05 20:04:16 浏览: 121
在Java 8中可以使用Stream API的groupingBy()方法来将List集合中的元素通过指定的键分组成Map。
假设我们有一个Person类,其中有两个字段:name和age,现在我们有一个List<Person>集合,需要将这个集合按照年龄分组,可以使用如下代码:
```
List<Person> personList = new ArrayList<>();
// 假设personList中有多个Person对象
Map<Integer, List<Person>> ageToPersonListMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上述代码中,首先调用了stream()方法将List转换为Stream,然后调用groupingBy()方法,将Person对象按照getAge()方法返回的年龄分组成Map<Integer, List<Person>>类型的集合,其中键为年龄,值为该年龄对应的Person对象列表。
除了按照单个键分组之外,也可以使用多级分组。例如,按照年龄和性别进行分组:
```
Map<Integer, Map<String, List<Person>>> ageAndGenderToPersonListMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.groupingBy(Person::getGender)));
```
上述代码中,首先按照年龄进行分组,然后对每个年龄组内的Person对象按照性别再进行二级分组。最终得到的是一个Map<Integer, Map<String, List<Person>>>类型的集合,其中键为年龄,值为一个按照性别分组的Map,键为性别,值为该年龄、该性别对应的Person对象列表。
阅读全文