dav*_*ave 5 java java-8 java-stream
我正在尝试处理一个流Integers并收集与谓词(通过compare()函数)匹配的整数到列表中.这是我编写的代码的大致轮廓.
private List<Integer> process() {
Z z = f(-1);
return IntStream.range(0, 10)
.filter(i -> compare(z, f(i)))
.collect(Collectors.toCollection(ArrayList::new)); // Error on this line
}
private boolean compare(Z z1, Z z2) { ... }
private Z f(int i) { ... }
Run Code Online (Sandbox Code Playgroud)
不幸的是我的解决方案没有编译,我无法理解突出显示的行的编译器错误:
IntStream类型中的方法collect(Supplier <R>,ObjIntConsumer <R>,BiConsumer <R,R>)不适用于参数(Collector <Object,capture#1-of?,Collection <Object >>)
有什么建议?
IntStream不包含collect接受单个类型参数的方法Collector.Stream确实.因此,你有你转换IntStream到一个Stream对象.
您可以将其打包IntStream成一个Stream<Integer>或用于mapToObj实现相同的功能.
例如:
return IntStream.range(0, 10)
.filter(i -> compare(z, f(i)))
.boxed()
.collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)
要么
return IntStream.range(0, 10)
.filter(i -> compare(z, f(i)))
.mapToObj(Integer::valueOf)
.collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)