【发布时间】:2021-01-15 14:32:50
【问题描述】:
目前,我正面临以下数据集。我的目标是通过前两列获得 Column4 组的最新总和。
// Column5 = version
new Foo(1, "bbb", "cccc", 111, 0)
new Foo(1, "bbb", "cccc", 234, 1) // latest
new Foo(1, "bbb", "dddd", 111, 0)
new Foo(1, "bbb", "dddd", 112, 1)
new Foo(1, "bbb", "dddd", 113, 2)
new Foo(1, "bbb", "dddd", 114, 3) // latest
new Foo(1, "xxx", "cccc", 111, 0) // latest
new Foo(2, "xxx", "yyyy", 0, 0)
new Foo(2, "xxx", "yyyy", 1, 1) // latest
...
我试过的是
// key: Column1, key: Column2, value: latest sum of Column4
Map<Long, Map<String, Integer>> fooMap = fooList.stream().collect(
Collectors.groupingBy(Foo::getColumn1, Collectors.groupingBy(Foo::getColumn2,
Collectors.collectingAndThen(????))));
???? 部分我是否尝试过Collectors.groupingBy、Collectors.maxBy、Collectors.summingInt
但它总是错的。 ????
我的理想地图应该是这样的:
1->bbb->348,1->xxx->111,2->xxx->1.
请帮忙????让我知道是否需要任何补品。谢谢。
【问题讨论】:
-
您是如何选择
(1, "bbb", "dddd", 114, 3)和(1, "bbb", "cccc", 234, 1)的,两者都是最新的?第三列在分组下也很重要? -
@Naman 是的。我想按列 1 + 2 + 3 从最新记录 (Column5) 组中获取 Column4 的总和。
标签: java java-8 java-stream groupingby