Collectors.groupingBy嵌套使用
时间: 2024-10-22 13:00:21 浏览: 13
`Collectors.groupingBy` 是 Java Stream API 中用于对集合数据进行分组的一个重要工具,它允许你按照某个键将元素划分到不同的组里。如果需要进行嵌套的分组,通常是在处理有多个层次的数据结构,比如一个对象包含多个属性,而你希望根据每个属性分别进行分组。
例如,假设你有一个 `Person` 对象列表,每个人都有名字和年龄,你可以这样做:
```java
List<Person> people = ... // 假设 Person 类包含 name 和 age 属性
Map<String, Map<Integer, List<Person>>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getName, // 按照名字分组
Collectors.groupingBy(Person::getAge)); // 然后再按照年龄分组
// groupedPeople 现在是一个多层次的映射:
// key1 (名字) -> {key2 (年龄): [list of People with that name and age]}
```
在这个例子中,`groupingBy(Person::getName)` 首先创建了一个按名字分组的结果,然后内部的 `Collectors.groupingBy(Person::getAge)` 又根据每个人的年龄进一步细分了每个名字下的组。
相关问题
多层Collectors.groupingBy
多层Collectors.groupingBy是用于多级分组的情况。它允许我们按照多个属性对元素进行分组,并生成一个嵌套的Map结构。
下面是一个示例:
```java
Map<Department, Map<Gender, List<Employee>>> employeesByDepartmentAndGender = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.groupingBy(Employee::getGender)));
```
在这个示例中,我们首先按照员工的部门进行分组,然后在每个部门内再按照性别进行分组,生成一个嵌套的Map结构。最终的结果是一个`Map<Department, Map<Gender, List<Employee>>>`,其中`Department`是部门的类型,`Gender`是性别的类型,`List<Employee>`是每个部门和性别的员工列表。
java Collectors.groupingBy
Java的Collectors.groupingBy是一个用于流式操作的收集器,用于对元素进行分组。它接受一个分类函数作为参数,并根据该函数对流中的元素进行分组。
在引用中,使用Collectors.groupingBy对prodList中的Product对象按照其category属性进行分组,并统计每个category出现的次数,返回一个Map<String, Long>类型的结果,其中键是category,值是该category出现的次数。
在引用中,使用Collectors.groupingBy对prodList中的Product对象按照其category属性进行分组,并计算每个category中num的总和,返回一个Map<String, Integer>类型的结果,其中键是category,值是该category中num的总和。
另外,在引用中,展示了如何实现多级分组。可以通过嵌套使用groupingBy来实现多级的分组操作。在这个例子中,先根据Dish的类型进行一级分组,然后根据热量的不同范围进行二级分组,返回一个Map<Dish.Type, Map<CaloricLevel, List<Dish>>>类型的结果,其中外层的键是Dish的类型,内层的键是热量范围,值是对应热量范围内的菜品列表。
总之,Collectors.groupingBy是一个非常有用的收集器,可以方便地对流中的元素进行分组操作,并返回相应的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [lambda表达式处理集合实用技巧](https://blog.csdn.net/qq_36364521/article/details/108466025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Java 8 - 收集器Collectors_分组groupingBy](https://blog.csdn.net/yangshangwei/article/details/114706379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文