web-dev-qa-db-ja.com

DoubleStreamをリストに収集する方法

私は次のコードを持っています:

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)

この問題を修正する方法は?

13
gstackoverflow

boxed() を使用できます。これにより、DoubleStreammapToDouble によって返されるプリミティブdoubleのストリーム)がStream<Double>にマップされます。

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

Double::valueOfDouble::parseDouble に変更したことに注意してください。これにより、Double.valueOfから返されたDoubleがボックスから取り出されなくなります。プリミティブdouble

しかし、なぜ最初にmapToDoubleを使用しているのですか?次のようにmapを使用できます。

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