gpt4 book ai didi

dictionary - 如何从流中映射java中Duration字段的总和?

转载 作者:行者123 更新时间:2023-12-02 18:49:40 26 4
gpt4 key购买 nike

我正在尝试创建一个包含事件及其总持续时间的 map ,并知道该事件会以不同的持续时间出现更多次。

通常情况下,我会这样解决:

Map<String,Duration> result2 = new HashMap<String,Duration>();
for(MonitoredData m: lista)
{
if(result2.containsKey(m.getActivity())) result2.replace(m.getActivity(),result2.get(m.getActivity()).plus(m.getDuration()));
else result2.put(m.getActivity(), m.getDuration());
}

但是我试图用流来做到这一点,但我不知道如何将总和放在那里。

Function<Duration, Duration> totalDuration = x -> x.plus(x);
Map<String, Duration> result2 = lista.stream().collect(
Collectors.groupingBy(MonitoredData::getActivity,
Collectors.groupingBy(totalDuration.apply(), Collectors.counting()))
);

我尝试以各种方式对它们进行分组,直接映射它们,或者直接在括号中对它们求和,但我被卡住了。

最佳答案

使用3-argument version toMap 收集器:

import static java.util.stream.Collectors.toMap;

Map<String,Duration> result = lista.stream()
.collect(toMap(MonitoredData::getActivity, MonitoredData::getDuration, Duration::plus));

另外,请注意 Map 接口(interface)在 Java 8 中添加了一些不错的功能。其中之一是 merge 。这样,甚至您的迭代 for 循环也可以重写得更加简洁:

for (MonitoredData m: lista) {
result.merge(m.getActivity(), m.getDuration(), Duration::plus);
}

关于dictionary - 如何从流中映射java中Duration字段的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43986346/

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