如何收集DoubleStream到列表

时间:2015-10-07 14:06:40

标签: java java-8 java-stream collect

我有以下代码:

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList());

我想返回List<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)

如何解决此问题?

1 个答案:

答案 0 :(得分:25)

您可以使用boxed()。这会将DoubleStream(原始双打流,由mapToDouble返回)映射到Stream<Double>

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());

请注意,我将Double::valueOf更改为Double::parseDouble:这可以防止Double返回的Double.valueOf被取消装箱到原始double

但是你为什么要开始使用mapToDouble?您可以像这样使用map

Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList());