首页 > 解决方案 > 查找每个 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++;
}

标签: javaguavamultimap

解决方案


没有内置函数可以执行此操作,但是将多图视为 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++;
}

推荐阅读