我正在学习一些教程,Java Streams看起来所有这些教程都已经过时了(或者显然我不明白)
var list = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
它告诉我这个错误:
Expected 3 arguments but found 1
Run Code Online (Sandbox Code Playgroud)
但是每个教程都使用这样的收集代码。
出了什么问题?
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带有原始元素的 s)。a 的元素List必须是引用类型。
您可以Integer改用包装器类型:
var list = Arrays.stream(new Integer[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
或者继续使用 an IntStream,然后将其装箱Stream<Integer>以将元素收集到 a List<Integer>:
var list = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.boxed()
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
如果您希望继续使用ints,您可以int从过滤的元素生成一个数组IntStream:
var array = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.toArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |