java-8 - Java 8 分组函数返回 Map<String, Integer> 而不是 Map<String,Long>

标签 java-8 java-stream

我使用下面提到的代码来查找每个单词在字符串中出现的次数。

Map<String, Long> map = Arrays.asList(text.split("\\s+")).stream().collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,Collectors.counting()))

此代码返回 Map<String, Long>我想将此代码转换为返回 Map<String, Integer> 。我尝试使用下面的代码来做到这一点,

但它抛出 ClassCastException java.lang.Integer 无法转换为 java.lang.Long

Map<String, Integer> map1 = 
 map.entrySet().parallelStream().collect(Collectors.toMap(entry -> entry.getKey(), entry -> Integer.valueOf(entry.getValue())));

请帮我解决这个问题,我需要它来返回 map

最佳答案

您可以在计数后执行 LongInteger 的转换,例如

Map<String, Integer> map = Arrays.stream(text.split("\\s+"))
    .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new,
        Collectors.collectingAndThen(Collectors.counting(), Long::intValue)));

但您也可以首先使用 int 值类型进行计数:

Map<String, Integer> map = Arrays.stream(text.split("\\s+"))
    .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new,
        Collectors.summingInt(word -> 1)));

这是对每个单词求和。您可以对 toMap 收集器使用相同的方法:

Map<String, Integer> map = Arrays.stream(text.split("\\s+"))
    .collect(Collectors.toMap(Function.identity(), word -> 1, Integer::sum));

关于java-8 - Java 8 分组函数返回 Map<String, Integer> 而不是 Map<String,Long>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353829/

相关文章:

Java,映射一个列表并在一行中进行包含检查还是遍历整个列表?

java-8 - 在 java 8 中构建 Maven 程序集

java - 你能帮我合并几个 map 的值吗?

java - 使用 collect Stream 方法时参数不匹配

java - 带有 Consumer 或 Filter 的 Java8 List 的条件,哪种方式更好

Java HashMap 遍历每个循环,但所有值都相同,是循环的最后一个值

特定索引的Java流过滤项目

java - 您可以扩展 IntSummaryStatistics 类吗?

java - 当 .stream().parallel() 做同样的事情时,为什么 Collection.parallelStream() 存在?

java - 使用流检测实体的多个属性的重复项