Java 没有为列表找到合适的分组方法<;字符串,整数>;

Java 没有为列表找到合适的分组方法<;字符串,整数>;,java,compiler-errors,java-8,java-stream,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); List list1

给出此代码:

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);  
List list1=Arrays.asList(“Collect”、“Collection”、“by”、“collector”);
Map Map=list1.stream().collect(Collectors.groupingBy(list1::toString,Collectors.counting());
系统输出打印项次(map);
它告诉我:

错误:找不到适用于的方法 groupingBy(列表::toString,收集器<对象,CAP#1,Long>)


我知道,如果list1是一个自定义类,它有getName方法并用list1::getName替换list1::toString,那么它会工作,但是为什么不使用toString()?

gorupingBy的键应该是流的每个元素都有的方法。由于每个元素都是
字符串
,而不是
列表
,因此不能使用
列表::toString
。相反,您应该对元素应用
toString
。或者,由于元素已经是字符串,只需调用
函数。一致性

Map<String, Long> map = 
   list1.stream()
        .collect(Collectors.groupingBy
                            (Function.identity(), Collectors.counting()));  
Map=
列表1.stream()
.collect(收集器.groupingBy
(Function.identity(),collector.counting());

gorupingBy的关键应该是流的每个元素都有一个方法。由于每个元素都是
字符串
,而不是
列表
,因此不能使用
列表::toString
。相反,您应该对元素应用
toString
。或者,由于元素已经是字符串,只需调用
函数。一致性

Map<String, Long> map = 
   list1.stream()
        .collect(Collectors.groupingBy
                            (Function.identity(), Collectors.counting()));  
Map=
列表1.stream()
.collect(收集器.groupingBy
(Function.identity(),collector.counting());

原始类型在十年前就过时了。添加一些类型参数。什么是
list::toString
应该做什么?对不起,我刚刚编辑了我的问题,应该是list1::toString not list::toString和list1 not list list1您了解类和对象之间的区别吗
list1
是一个对象,
list1::toString
相当于
()->list1.toString()
。原始类型在十年前就过时了。添加一些类型参数。什么是
list::toString
应该做什么?对不起,我刚刚编辑了我的问题,应该是list1::toString not list::toString和list1 not list list1您了解类和对象之间的区别吗
list1
是一个对象,
list1::toString
相当于
()->list1.toString()
@Mureinik我刚刚编辑了我的问题。但是toString()是list1中每个元素中的一个方法,因为默认情况下它是从Object继承的,所以?@Neokyuubi
list1
不是流中的元素。您可以使用
Object::toString
String::toString
方法引用,尽管对
String
调用
toString()
不是很有用。@Mureinik我刚刚编辑了我的问题。但是toString()是list1中每个元素中的一个方法,因为默认情况下它是从Object继承的,所以?@Neokyuubi
list1
不是流中的元素。您可以使用
Object::toString
String::toString
方法引用,尽管对
String
调用
toString()
不是很有用。