相关疑难解决方法(0)

计算流的元素

我想计算一个流的不同元素,我想知道为什么

Stream<String> stream = Stream.of("a", "b", "a", "c", "c", "a", "a", "d");
Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, 1, Integer::sum));
Run Code Online (Sandbox Code Playgroud)

不起作用.Eclipse告诉我

收集器类型中的Map(Function,Function,BinaryOperator)方法不适用于参数((s) - > {},int,Integer :: sum)

顺便说一句,我知道这个解决方案:

Map<String, Long> counter2 = stream.collect(Collectors.groupingBy(s -> s, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  1. 我的第一种方法有什么错误?
  2. 你会如何实施这样的计数器?

编辑:我自己解决了第一个问题:

Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, s -> 1, Integer::sum)); 
Run Code Online (Sandbox Code Playgroud)

Java期望一个函数作为第二个参数.

java count java-8 java-stream collectors

9
推荐指数
1
解决办法
9070
查看次数

计算流中的元素并返回Integer insted long

我需要计算Stream中的Elements并将其分配给Integer而不进行强制转换.

.count() 回来很久

想到了.collect(Collectors.reducing(..))但不能弄明白.我觉得有一些简单的事我没有得到.

我的尝试:

Stream<String> s = Stream.of("Hallo ", "Test", "String");
Integer count = s.filter(e -> (e.length() >= lb && e.length() <= ub && !e.contains(" ")))
                 .map(e -> e.toUpperCase())
                 .distinct()
                 .collect(Collectors.reducing(0, e -> 1, Integer::sum)));

System.out.println(count);
Run Code Online (Sandbox Code Playgroud)

java java-stream

0
推荐指数
2
解决办法
875
查看次数

标签 统计

java ×2

java-stream ×2

collectors ×1

count ×1

java-8 ×1