Java:使用Stream API从原始数组创建List

时间:2014-12-19 19:41:42

标签: java java-8 java-stream

我正在尝试从原始数组中创建一个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个参数。

我做错了什么?

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