将List <Long>转换为Map <Long,Long>,用于计算出现次数

ski*_*iwi 9 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);
Run Code Online (Sandbox Code Playgroud)

重要的部分是,我有一个List<Long>可能有一些重复的Long数字.

现在我想将它转换为a Map<Long, Long>作为键的元素和值的出现.

我以为:

    Map<Long, Long> primeFactorCount = primeFactors.stream()
            .collect(Collectors.counting());
Run Code Online (Sandbox Code Playgroud)

会工作,但事实并非如此.我查看了java.util.stream.Collectors文档中的示例.

我如何使用这些功能?

nos*_*sid 11

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

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

Map<Long, Long> primeFactorCount = primeFactors.stream()
        .collect(groupingBy(p -> p, counting()));
Run Code Online (Sandbox Code Playgroud)