当前位置: 首页 > 知识库问答 >
问题:

使用collect Stream方法时参数不匹配

公冶桐
2023-03-14

以下代码:

names = Arrays.asList("A","B","C").stream();
List<String> namesAsList = names.collect(() -> new ArrayList<String>(),List::add,List::add);
System.out.println("Individual Strings put into a list: " + namesAsList);

编译期间生成以下错误:

List namesAsList=names.collect(()->new ArrayList(),List::Add,List::Add);^(参数不匹配;无效的方法引用不兼容的类型:ArrayList无法转换为int)其中R,T是类型变量:R在方法collect中声明的extends Object(Supplier,BiConsumer,BiConsumer)T在接口流1中声明的extends Object错误

Stream<String> names = Arrays.asList("A","B","C").stream();
List<String> namesAsList = names.collect(() -> new ArrayList(),List::add,List::add);
System.out.println("Individual Strings put into a list: " + namesAsList);

共有1个答案

牟星火
2023-03-14

combiner传递的方法引用实际上不适合。尝试:

List<String> namesAsList = names
  .collect(ArrayList::new, List::add, List::addAll);

您传递了list::add,编译器正尽力将其解释为biconsumer类型的组合器实例。因此,出现了奇怪的参数不匹配错误。

此外,我假设您只是为了研究目的而实施此操作。如果要将收集到列表,只需使用:

.collect(Collectors.toList());
.collect(Collectors.toCollection(ArrayList::new));
 类似资料: