我正在尝试从原始数组中创建一个List
int[] values={4,5,2,3,42,60,20};
List<Integer> greaterThan4 =
Arrays.stream(values)
.filter(value -> value > 4)
.collect(Collectors.toList());
但是最后一个函数collect
给了我一个错误,因为它需要其他参数。它需要3个参数Supplier,ObjIntConsumer和BiConsumer。
当我看到仅使用collect(Collectors.toList());
并获取列表的不同示例时,我不明白为什么它需要3个参数。
我做错了什么?
答案 0 :(得分:10)
是的,因为Arrays.stream
会返回IntStream
。您可以致电boxed()
获取Stream<Integer>
,然后执行收集操作。
List<Integer> greaterThan4 = Arrays.stream(values)
.filter(value -> value > 4)
.boxed()
.collect(Collectors.toList());
答案 1 :(得分:1)
您可以将int[] values={4,5,2,3,42,60,20};
更改为Integer[] values={4,5,2,3,42,60,20};
,因为当前您正在传递基本类型数组(int
),但是您应该传递对象数组,即Integer
答案 2 :(得分:1)
您只使用一组基元,而不是Integer
。我建议您使用Arrays.asList(T...)
之类的
Integer[] values={4,5,2,3,42,60,20};
List<Integer> al = new ArrayList<>(Arrays.asList(values));