java - 查找每个 ListMultiMap 键的总和
问题描述
我找不到一种简单的方法来查找 Java 中 ListMultiMap 中所有键的总和。
我有一个 ListMultiMap:
ListMultimap<String, Long> foodCals = ArrayListMultimap.create();
其中包含具有多个值的不同键:
["19/03/2020": 77, 88, 88], ["18/03/2020": 22, 33, 21], ["17/03/2020": 77, 33, 88]
您如何找到每个密钥的总数?并获得如下输出:1-253、2-76、3-198。
像这样的东西:
int p = 0;
for(String s : foodCals.keySet()){
System.out.Println(p + foodCals.sumOfKey(p)) //Print the index number + the sumOfKey (sumOfKey doesn't exist).
p++;
}
解决方案
没有内置函数可以执行此操作,但是将多图视为 Map(带有asMap()
)将为您提供每天的值集合。从那里,您只需要对它们求和,例如,通过流式传输它们并将它们转换为原语:
int p = 0;
for (Collection<Long> vals : foodCals.asMap().values()) {
System.out.println(p + " - " + vals.stream().mapToLong(Long::longValue).sum());
p++;
}
编辑:
对于较旧的 Java 版本(8 之前),应该应用相同的逻辑,尽管语法有点笨拙,并且您必须自己对这些值求和:
int p = 0;
for (Collection<Long> vals : foodCals.asMap().values()) {
long sum = 0L;
for (Long val : vals) {
sum += val;
}
System.out.println(p + " - " + sum);
p++;
}
推荐阅读
- exit - 在 RLWrap 中处理 EOF
- php - PHP中的随机关键字
- python - RuntimeError: imageio.ffmpeg.download() 已被弃用。请改用“pip install imageio-ffmpeg”。
- xamarin - 如何通过指定类来构建 xamarin 应用程序
- javascript - 使用 redux-saga 进行轮询
- spring-boot - PageImpl 反序列化期间出错:无法构造 `org.springframework.data.domain.PageImpl` 的实例
- python - 如何中断函数并从循环中返回最后一个值。返回值为无
- javascript - JS - 查找字符串的所有实例并包装在锚标记中
- excel - 编辑代码有问题(召回错误的工作表)-错误(运行时错误'1004')无效参数
- javascript - 在 Docker 容器中找不到 npm(但仅在通过 child_process 执行时)