java stream collect函数给出错误

Cur*_*ous 6 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());
Run Code Online (Sandbox Code Playgroud)

错误:

Type mismatch: cannot convert from Collector<Object,capture#5-of ?,List<Object>> 
to Supplier<R>
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 8

第一个语句产生一个Stream<Integer>带有a的collect方法Collector.

第二个语句产生一个IntStream没有collect方法的语句.

为了使第二个语句起作用,您必须将其转换IntStream为a Stream<Integer>,如下所示:

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

或者你可以生成一个int数组而不是List<Integer>:

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

  • 您也可以使用`mapToObj`而不是`map(...).boxed()`. (5认同)

Joe*_*e C 7

虽然有一个接受a 的collect方法,但是没有这样的方法.StreamCollectorIntStream

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