java - 在 map java8 上用 lambda 计数器

标签 java lambda java-8 hashmap java-stream

我正在尝试转换它:

Map<String,Long> parties = new HashMap<>();
parties.add("a", 1);
...
Long counter = 0l;

for (Long votes : parties.values()){
    counter += votes;
}

对于 Java8 中的 lambda,我像这样使用 reduce 来尝试它:

parties.entrySet().stream().reduce((stringLongEntry, stringLongEntry2) -> /*Here I Stack*/)

但我不知道如何继续。

PS :我知道我可以做到: parties.values().stream().count(); 但我想找到另一种方法。

最佳答案

如果您始终将 1 存储为每个键的值,则总计数将始终与 map 的大小相匹配。您可以使用 parties.size() 轻松获得它。

如果您为每个键存储不同的值,那么计算映射中有多少个值是错误的。您应该改为对它们求和:

long total = parties.values().stream().mapToLong(v -> v).sum();

关于java - 在 map java8 上用 lambda 计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676286/

相关文章:

python使用lambda使用foldleft计算间隔

java - 检查流中的instanceof

generics - Oracle JDK 和 Eclipse JDT 编译器不同意!哪个编译不正确?不寻常的泛型和推理

c# - 使用策略将 List<T> 转换为 Dictionary

java - 如果将以下代码中的 && 替换为 & 会出现什么问题

Linq/lambda有关.Select的问题(Newby Learning 3.0)

Java 8 Optional 和 flatMap - 有什么问题吗?

java - Java 8 三元条件和未装箱原语的方法重载歧义

java - 从hibernate sql join获取多个实体

java - 使用java进行数据表服务器端处理