java - 将 List<Long> 转换为计算出现次数的 Map<Long, Long>

标签 java dictionary java-8 java-stream collectors

我正在玩 Java 8,我知道通过阅读文档这一定是可能的,但我只是不知道如何去做。

我有以下工作代码:

    long factorProduct = LongStream.rangeClosed(1, maxFactor)
            .filter(this::isOptimalFactor)
            .reduce((i, j) -> i * j)
            .getAsLong();
    List<Long> primeFactors = primeFactors(factorProduct);

重要的是我有一个 List<Long> 可能在某些 Long 上有重复项数。

现在我想把它转换成 Map<Long, Long>以元素作为键,以出现的值作为值。

我认为:

    Map<Long, Long> primeFactorCount = primeFactors.stream()
            .collect(Collectors.counting());

会起作用,但它不会。我查了例子in the java.util.stream.Collectors documentation .

我需要如何使用这些功能?

最佳答案

如果你想对元素进行分组,你必须使用groupingBy:

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

Map<Long, Long> primeFactorCount = primeFactors.stream()
        .collect(groupingBy(p -> p, counting()));

关于java - 将 List<Long> 转换为计算出现次数的 Map<Long, Long>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974369/

相关文章:

java - 通过for循环添加不同名称的对象

java - 投递箱 API : how can I get the amount of remaining free space?

python - 聚合和重命名字典中的键

Python:使用 map 函数独立处理每一行

java - 如何使用jdk8对ArrayList<Object>进行分组和过滤

JAVA 8 在启动时崩溃并出现 fatal error 日志 - Solaris 10 (sparc)

java - String.split 导致最后一个索引换行

java - 使用java递归深度优先遍历文件系统

python-3.x - 我想将字典转换为 pandas dataFrame

java - ConcurrentHashMap中的forEach和forEachEntry有什么区别