假设您有一个这样的对象图(尽管可以想象它更大):
List<Map<String, Object>>

[{
    "rtype": "133",
    "total": 2555
}, {
    "rtype": "133",
    "total": 5553
}, {
    "rtype": "135",
    "total": 100
}]

rtype = 133,有两个!

我想对Streams进行以下操作:
//result:
//Map<String, Object(or double)>
{"133": 2555+5553, "135": 100} // SUM() of the 133s

我在理解Collectors&groupBy的工作原理时遇到了一些麻烦,但是我想这可能用于这种情况。

在Java Streams API中对此进行编码的正确方法是什么?

我在查找与地图相似的示例时遇到了麻烦(人们在示例中使用列表的次数更多)

最佳答案

首先,您确实应该使用适当的类而不是地图。话虽如此,这是将地图列表分组的方法:

Map<String, Double> grouped = maps.stream()
        .collect(Collectors.groupingBy(m -> (String)m.get("rtype"),
                Collectors.summingDouble(m -> ((Number)m.get("total")).doubleValue())));

09-10 03:21