Java8 stream 中利用 groupingBy 进行多字段分组求和
时间: 2024-04-25 09:21:06 浏览: 35
在Java 8的Stream中,可以使用groupingBy方法进行多字段分组求和。首先,我们需要创建一个包含对象的集合,然后使用stream方法将其转换为流。接下来,我们可以使用groupingBy方法来指定多个字段作为分组条件。每个字段都可以通过lambda表达式来指定。最后,我们可以使用collect方法来收集结果。
示例代码如下:
```
List<Item> items = Arrays.asList(
new Item("apple", "China"),
new Item("apple", "USA"),
new Item("banana", "China"),
new Item("banana", "USA"),
new Item("orange", "China"),
new Item("orange", "USA")
);
Map<String, Map<String, Long>> result = items.stream()
.collect(Collectors.groupingBy(Item::getProductType,
Collectors.groupingBy(Item::getCountry, Collectors.counting())));
System.out.println(result);
```
在这个示例中,我们创建了一个包含产品类型和国家的Item对象集合。然后,我们使用stream方法将其转换为流。接下来,我们使用groupingBy方法指定了两个字段作为分组条件,即产品类型和国家。最后,我们使用collect方法来收集结果,并将结果存储在一个嵌套的Map中,其中外层的键是产品类型,内层的键是国家,值是对应的计数。
输出结果将会是一个嵌套的Map,其中外层的键是产品类型,内层的键是国家,值是对应的计数。
#### 引用[.reference_title]
- *1* *3* [Java8 stream 中利用 groupingBy 进行多字段分组求和](https://blog.csdn.net/lizhengyu891231/article/details/108997080)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [Java8 stream 中利用 groupingBy 进行多字段分组](https://blog.csdn.net/weixin_39637363/article/details/113543899)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]