如何收集DoubleStream到List
How to collect DoubleStream to List
我有以下代码:
Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList());
我要returnList<Double>
.
此代码无法编译。
我看到错误:
Error:(57, 69) java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjDoubleConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
如何解决这个问题?
您可以使用 boxed()
. This maps a DoubleStream
(Stream of primitive doubles, as returned by mapToDouble
) 到 Stream<Double>
。
Stream.of("1,2,3,4".split(",")).mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());
请注意,我更改了 Double::valueOf
to Double::parseDouble
:这可以防止 Double.valueOf
返回的 Double
被拆箱为原始 double
。
但是你为什么一开始就使用 mapToDouble
?您可以像这样使用 map
:
Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList());
我有以下代码:
Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList());
我要returnList<Double>
.
此代码无法编译。
我看到错误:
Error:(57, 69) java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjDoubleConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
如何解决这个问题?
您可以使用 boxed()
. This maps a DoubleStream
(Stream of primitive doubles, as returned by mapToDouble
) 到 Stream<Double>
。
Stream.of("1,2,3,4".split(",")).mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());
请注意,我更改了 Double::valueOf
to Double::parseDouble
:这可以防止 Double.valueOf
返回的 Double
被拆箱为原始 double
。
但是你为什么一开始就使用 mapToDouble
?您可以像这样使用 map
:
Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList());