我正在关注一些教程,Java Streams
看起来所有这些教程都已经过时了(或者显然我不明白)
var list = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.collect(toList());
它告诉我这个错误:
Expected 3 arguments but found 1
但是每个教程都使用这样的收集代码。
怎么了?
Arrays.stream(new int[] {1,2,3,4,5,6})
创建一个IntStream
,它没有collect
采用单个参数的collect
方法(的方法IntStream
具有签名- <R> R collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R, R> combiner)
)。即使这样做,toList()
也将不适用,因为Java不允许List<int>
(即List
带有原始元素的)。a的元素List
必须是引用类型。
您可以Integer
改用包装器类型:
var list = Arrays.stream(new Integer[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.collect(toList());
或继续使用IntStream
,然后将其装箱到Stream<Integer>
以后,以便将元素收集到List<Integer>
:
var list = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.boxed()
.collect(toList());
如果您希望继续使用int
s,则可以根据int
filter的元素生成一个数组IntStream
:
var array = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.toArray();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句