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继承的,所以?@Neokyuubilist1
不是流中的元素。您可以使用Object::toString
或String::toString
方法引用,尽管对String
调用toString()
不是很有用。@Mureinik我刚刚编辑了我的问题。但是toString()是list1中每个元素中的一个方法,因为默认情况下它是从Object继承的,所以?@Neokyuubilist1
不是流中的元素。您可以使用Object::toString
或String::toString
方法引用,尽管对String
调用toString()
不是很有用。