找不到合适的方法用于分组List <string,integer =“”>

时间:2017-09-30 17:31:29

标签: java compiler-errors java-8 java-stream

提供此代码:

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()?

1 个答案:

答案 0 :(得分:3)

gorupingBy的密钥应该是流的每个元素都有的方法。由于每个元素都是String,而不是List,因此无法使用List::toString。相反,您应该将toString应用于元素。或者由于元素已经是字符串,只需调用Function.indentity

Map<String, Long> map = 
   list1.stream()
        .collect(Collectors.groupingBy
                            (Function.identity(), Collectors.counting()));