Hin*_*sum 4 java compilation collect tolist java-stream
如下:
IntStream iStream = IntStream.range(1,4);
iStream.forEach(System.out::print);
List list1 = iStream.collect(Collectors.toList());//error!
Run Code Online (Sandbox Code Playgroud)
Java 1.8编译器提供类型推导错误.类似的代码可以用于String类型:
List<String> ls = new ArrayList<>();
ls.add("abc");
ls.add("xyz");
List list2 = ls.stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
为什么?IntStream/LongStream/DoubleStream的工作方式与其他类型不同吗?如何修复我的编译错误?
原始流没有相同的collect
方法Stream
.您可以将它们转换为包装类型的流,以便使用collect
接受Collector
参数的方法:
List<Integer> list1 = iStream.boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
IntStream
(连同其他原始流)没有collect(Collector)
方法。它的收集方法是:collect(Supplier,ObjIntConsumer,BiConsumer)
。
如果要将int
s收集到 a 中List
,可以执行以下操作:
List<Integer> list = IntStream.range(0, 10).collect(ArrayList::new, List::add, List::addAll);
Run Code Online (Sandbox Code Playgroud)
或者您可以调用boxed()
将 the 转换IntStream
为 a Stream<Integer>
:
List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这两个选项都将原始int
s装箱到Integer
s 中,因此您要使用哪个取决于您。就个人而言,我发现第二个选项更简单明了。
归档时间: |
|
查看次数: |
537 次 |
最近记录: |