【发布时间】:2019-02-03 02:38:59
【问题描述】:
我有一个列表 fooList
class Foo {
private String category;
private int amount;
private int price;
... constructor, getters & setters
}
我想按类别分组,然后将金额和价格相加。
结果将存储在地图中:
Map<Foo, List<Foo>> map = new HashMap<>();
关键是 Foo 持有汇总的金额和价格,并带有一个列表作为所有具有相同类别的对象的值。
到目前为止,我已经尝试了以下方法:
Map<String, List<Foo>> map = fooList.stream().collect(groupingBy(Foo::getCategory()));
现在我只需要将字符串键替换为包含汇总金额和价格的 Foo 对象。这是我卡住的地方。我似乎找不到任何方法。
【问题讨论】:
-
你看过
Collectors.summarizingLong吗? -
是的,但是你如何总结多个字段?
-
好吧,直到最近我才回答了一些非常接近这个的问题...... jdk-12 中的stackoverflow.com/a/52041895/1059372 似乎会有一个
BiCollector让你的生活更轻松 -
我对您的理解正确吗, KEY 将保存总和?并且 List
应该包含所有原始实例? -
@jokster 是的,没错!
标签: java java-8 java-stream grouping