java stream collect函数给出错误

时间:2017-09-26 05:58:25

标签: java java-8 java-stream

第一个陈述有效,但不是第二个给出以下错误,为什么?

java.util.Arrays.asList(1,2,3,4,5).stream()
                                  .map(n -> n+1)
                                  .collect(Collectors.toList());

List<Integer> list = IntStream.rangeClosed(1, 10)
                              .map(n -> n + 1)
                              .collect(Collectors.toList());

ERROR:

Type mismatch: cannot convert from Collector<Object,capture#5-of ?,List<Object>> 
to Supplier<R>

2 个答案:

答案 0 :(得分:6)

第一个语句产生一个Stream<Integer>,其collect方法需要Collector

第二个语句产生一个IntStream,它没有collect方法。

为了使第二个声明有效, 您必须将IntStream转换为Stream<Integer>,如下所示:

List<Integer> list = IntStream.rangeClosed(1, 10)
                              .map(n -> n + 1)
                              .boxed()
                              .collect(Collectors.toList());

或者您可以生成int数组而不是List<Integer>

int[] array = IntStream.rangeClosed(1, 10)
                       .map(n -> n + 1)
                       .toArray();

答案 1 :(得分:6)

虽然collect上的Stream方法接受Collector,但IntStream上没有这样的方法。

您可以使用IntStream方法将Stream<Integer>转换为boxed()