gpt4 book ai didi

java - 在java流中按日期聚合数据

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:56 24 4
gpt4 key购买 nike

我有一个 StatisticsItem ( String context, Integer numberOfHits, String yyyyMM ) 列表。实例的一个例子是 context=WEBSITE, numberOfHits=12456, yyyyMM="2019-06"

我想得到一个排序的 Map<String, Integer>,它以 yyyyMM 日期为键,以本月的总点击数为值。

我尝试了这种代码,但我无法填补空白:

Map<String, Integer> collect = 
list.stream()
.sorted((s1, s2) -> s1.getYearAndMonth().compareTo(s2.getYearAndMonth()))
./* TODO: What method ? */((s1, s2) -> s1.getYearAndMonth().equals(s2.getYearAndMonth())
? new StatisticsItem(s1.getNumberOfHits() + s2.getNumberOfHits(), s1.getYearAndMonth()) // Construct new StatistictsItem without "context"
: /* TODO: don't touch data with different dates */)
.collect(Collectors.toMap(s -> s.getYearAndMonth(), s -> s.getNumberOfHits()));

输入:

{context="WEBSITE", numberOfHits=500, yyyyMM="2019-04", 
context="WEBSITE", numberOfHits=750, yyyyMM="2019-05",
context="WEBSITE", numberOfHits=470, yyyyMM="2019-06",
context="REST", numberOfHits=5400, yyyyMM="2019-04",
context="REST", numberOfHits=4700, yyyyMM="2019-05",
context="REST", numberOfHits=9700, yyyyMM="2019-06"}

期望的输出(在这种情况下上下文可以为 null 或其他任何内容):

{context=null, numberOfHits=5900, yyyyMM="2019-04", 
context=null, numberOfHits=5450, yyyyMM="2019-05",
context=null, numberOfHits=10170, yyyyMM="2019-06"}

最佳答案

您可以只按日期字段分组。

list.stream().groupingBy(StatisticsItem::getYyyyMM, 
Collectors.mapping(StatisticsItem::getNumberOfHits, Collectors.summingInt(Integer::intValue)))

然后你有一个Map<String, Integer>有 [yyyyMM - count] 个条目。

关于java - 在java流中按日期聚合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56883046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com