第一个陈述有效,但不是第二个给出以下错误,为什么?
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>
答案 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()
。