提供此代码:
List<String> list1 = Arrays.asList("Collect","Collection","by","Collectors");
Map<String, Long> map = list1.stream().collect(Collectors.groupingBy(list1::toString, Collectors.counting()));
System.out.println(map);
它告诉我:
错误:找不到合适的方法 groupingBy(list :: toString,Collector&lt; Object,CAP#1,Long&gt;)
我知道如果list1是一个自定义类,让我们说getName方法并用list1 :: getName替换list1 :: toString它会工作,但为什么不toString()?
答案 0 :(得分:3)
gorupingBy
的密钥应该是流的每个元素都有的方法。由于每个元素都是String
,而不是List
,因此无法使用List::toString
。相反,您应该将toString
应用于元素。或者由于元素已经是字符串,只需调用Function.indentity
:
Map<String, Long> map =
list1.stream()
.collect(Collectors.groupingBy
(Function.identity(), Collectors.counting()));