java 根据多个key汇总数量
时间: 2023-11-28 21:50:59 浏览: 38
如果有一个对象列表,想要根据多个 key 进行分组,并且汇总数量,可以使用 Java 8 的 Stream API 和 Collectors 工具类来实现。
假设有一个对象列表,每个对象都有两个属性:name 和 category,现在要根据这两个属性进行分组,并且汇总数量,代码如下:
```java
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("item1", "category1"),
new Item("item2", "category1"),
new Item("item3", "category2"),
new Item("item4", "category2"),
new Item("item5", "category2")
);
Map<String, Map<String, Long>> result =
items.stream()
.collect(Collectors.groupingBy(
Item::getCategory,
Collectors.groupingBy(
Item::getName,
Collectors.counting())));
System.out.println(result);
}
}
class Item {
private String name;
private String category;
public Item(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return name;
}
public String getCategory() {
return category;
}
}
```
输出结果为:
```
{category1={item2=1, item1=1}, category2={item5=1, item3=1, item4=1}}
```
解释一下代码:
- 首先将对象列表转换成 Stream,然后使用 `groupingBy` 方法进行分组,第一个参数是分类的 key,第二个参数是对每个分类再进行分组,这里使用 `groupingBy` 方法将每个分类按照 name 属性进行分组,并使用 `counting` 方法统计数量。
- 最后将结果放在一个 Map 对象中。
这样就可以根据多个 key 汇总数量了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)