stream两表分组
时间: 2023-10-21 17:26:44 浏览: 51
在Java 8的Stream中,可以使用groupingBy方法进行多字段分组操作。这个方法接受一个Function作为参数,用于提取分组的依据字段。具体而言,可以使用Collectors.groupingBy方法将Stream中的元素按照多个字段进行分组,并将结果收集到一个Map中。在这个Map中,键是分组依据字段的值,值是对应分组的元素列表。
例如,如果有两个实体类Person和Order,我们希望按照Person的name字段和Order的type字段进行分组,则可以使用下面的代码:
```java
Map<String, Map<String, List<Order>>> groupedData = orders.stream()
.collect(Collectors.groupingBy(order -> order.getPerson().getName(),
Collectors.groupingBy(Order::getType)));
```
上面的代码中,orders是一个包含Order对象的Stream,通过调用groupingBy方法,首先按照Person的name字段进行分组,然后在每个分组中再按照Order的type字段进行分组。最终的结果是一个嵌套的Map,其中外层的键是Person的name字段的值,内层的键是Order的type字段的值,值是对应分组的Order对象列表。
通过这种方式,我们可以方便地对多个字段进行分组,并且按照需要进一步处理各个分组的元素列表。这对于数据分析和统计等场景非常有用。 <span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [stream流两字段分组](https://blog.csdn.net/Xinkule__/article/details/123543878)[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: 33.333333333333336%"]
- *2* [Java8 stream 中利用 groupingBy 进行多字段分组求和案例](https://download.csdn.net/download/weixin_38692928/12821045)[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: 33.333333333333336%"]
- *3* [java8 stream自定义分组求和并排序的实现](https://download.csdn.net/download/weixin_38613330/12743652)[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: 33.333333333333336%"]
[ .reference_list ]