Java:使用流API从基元数组生成列表

Java:使用流API从基元数组生成列表,java,java-8,java-stream,Java,Java 8,Java Stream,我正试图从一个基本数组中创建一个列表 int[] values={4,5,2,3,42,60,20}; List<Integer> greaterThan4 = Arrays.stream(values) .filter(value -> value > 4) .collect(Collectors.toList()); int[]值={4,5,2,3,42,60,20}; 列表大于4= Arrays.stream(值) .过滤器(值->

我正试图从一个基本数组中创建一个列表

int[] values={4,5,2,3,42,60,20};
List<Integer> greaterThan4 =
Arrays.stream(values)
        .filter(value -> value > 4)
        .collect(Collectors.toList());
int[]值={4,5,2,3,42,60,20};
列表大于4=
Arrays.stream(值)
.过滤器(值->值>4)
.collect(Collectors.toList());
但是最后一个函数
collect
给了我一个错误,因为它需要其他参数。它需要三个参数:供应商、ObjIntConsumer和双消费者

我不明白为什么它需要3个参数,当我看到不同的示例只使用
collect(Collectors.toList())并获取列表


我做错了什么?

是的,这是因为
Arrays.stream
返回一个
IntStream
。您可以调用
boxed()
来获取
,然后执行收集操作

List<Integer> greaterThan4 = Arrays.stream(values)
                                   .filter(value -> value > 4)
                                   .boxed()
                                   .collect(Collectors.toList());
List greaterThan4=Arrays.stream(值)
.过滤器(值->值>4)
.boxed()
.collect(Collectors.toList());

您可以更改
int[]值={4,5,2,3,42,60,20}
to
Integer[]值={4,5,2,3,42,60,20}
因为当前您正在传递一个基元类型的数组(
int
),但是如果您传递一个对象数组,即
Integer
,那么您使用的是基元数组,而不是
Integer
。我建议你用like

Integer[]值={4,5,2,3,42,60,20};
List al=新的ArrayList(Arrays.asList(values));

+1用于发现真正的问题和真正的解决方案
Integer[] values={4,5,2,3,42,60,20};
List<Integer> al = new ArrayList<>(Arrays.asList(values));