Vas*_*sco 3 java java-stream collectors
任何人都可以解释为什么下面的代码不能编译但第二个代码呢?
不要编译
private void doNotCompile() {
List<Integer> out;
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> Integer.valueOf(2 * e))
.collect(Collectors.toList());
System.out.println(out);
}
Run Code Online (Sandbox Code Playgroud)
收集行上的编译错误
编译
private void compiles() {
List<Integer> in;
in = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> out;
out = in.stream()
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.collect(Collectors.toList());
System.out.println(out);
}
Run Code Online (Sandbox Code Playgroud)
IntStream没有collect接受a 的方法Collector.如果你想要一个List<Integer>,你必须把它IntStream装入Stream<Integer>:
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.boxed()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
另一种选择.map().boxed()是mapToObj():
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.mapToObj(e -> 2 * e)
.collect(Collectors.toList ());
Run Code Online (Sandbox Code Playgroud)
或者你可以使用这个IntStream collect方法:
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |