stream.groupby 分组
时间: 2023-09-21 20:04:18 浏览: 98
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
在Java的Stream API中,可以使用groupingBy方法对元素进行分组。这个方法接受一个Function参数,用于指定要根据哪个字段进行分组。在使用groupingBy方法时,可以通过拼接多个字段来实现多级分组。例如,可以将两个字段拼接为一个字符串,然后使用这个字符串作为分组的依据。例如,可以使用以下代码实现两个字段进行分组:
Map<String, List<Order>> map = list.stream().collect(Collectors.groupingBy(ord -> ord.getOrderId() + ";" + ord.getOrderGoodsId()));
在这个例子中,getOrderId和getOrderGoodsId两个字段被拼接为一个字符串,作为分组的依据。最终的结果是一个Map,其中键是拼接后的字符串,值是分组后的订单列表。
如果需要在分组之前对元素进行过滤,可以在stream操作链中添加filter方法。例如,可以使用以下代码实现在分组之前对元素进行判断过滤:
Map<String, List<Order>> map = list.stream().filter(ord -> ord.getOrderId() != null).collect(Collectors.groupingBy(h -> h.getOrderId()));
在这个例子中,使用filter方法过滤掉了getOrderId为null的元素,然后再进行分组操作。
需要注意的是,在groupingBy方法中,分组是根据拼接的字段来进行的。在上述例子中,使用";"来区分订单号和产品号。这样可以确保生成的键是独一无二的,以便正确进行分组操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [对List进行分组(java8的Stream 分组的groupBy 的使用)](https://blog.csdn.net/weixin_43103583/article/details/108885273)[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: 100%"]
[ .reference_list ]
阅读全文