new ArrayL-6ren">
gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:13 26 4
gpt4 key购买 nike

以下代码:

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); ^ (argument mismatch; invalid method reference incompatible types: ArrayList cannot be converted to int) where R,T are type-variables: R extends Object declared in method collect(Supplier,BiConsumer,BiConsumer) T extends Object declared in interface Stream 1 error

当我修改代码以删除泛型时,代码编译时会出现未经检查的表达式警告:

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);

为什么我会收到此错误?我不希望问题与 int 有关。

如果答案能包括解决问题的方法,将不胜感激,这样我就可以学习如何自己解决这些问题。

最佳答案

combiner 传递的方法引用并不适合。尝试:

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

您传递了 List::add 并且编译器正在尽最大努力将其解释为 BiConsumer 类型的组合器实例。因此,奇怪的参数不匹配错误。


此外,我假设您只是出于研究目的实现此功能。如果你想收集一个Stream到一个List,你可以简单地使用:

.collect(Collectors.toList());

如果你想将你的 Stream 专门收集到 ArrayList,你可以这样做:

.collect(Collectors.toCollection(ArrayList::new));

关于java - 使用 collect Stream 方法时参数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45297901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com