使用java流将对象列表转换为计数映射

时间:2021-01-14 08:44:08

标签: java java-8 java-stream

我有 Item 对象的列表。 ItemCategory 是一个枚举。

public class Item {
    private String itemId;
    private String itemName;
    private ItemCategory itemCategory;
    private Integer quantity;
}

我想将此列表转换为 {ItemCategory -> total_quantity} 的地图

例如

"items":[
        {
            "itemId": "item_1",
            "itemName": "A",
            "itemCategory": "category1",
            "quantity": 50
        },
        {
            "itemId": "item_2",
            "itemName": "B",
            "itemCategory": "category1",
            "quantity": 10
        },
        {
            "itemId": "item_3",
            "itemName": "C",
            "itemCategory": "category2",
            "quantity": 10
        }
    ]

这将被转换为地图:{"category1"->60, "category2"->10}

简单的方法是遍历项目并创建地图。
我在想是否有办法使用流来实现这一点。

1 个答案:

答案 0 :(得分:1)

您可以使用流进行该操作。

items.stream().collect(Collectors.groupingBy(Item::getItemCategory, Collectors.summingInt(Item::getQuantity)))