私は次のコードを持っています:
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)
この問題を修正する方法は?
boxed()
を使用できます。これにより、DoubleStream
( mapToDouble
によって返されるプリミティブdoubleのストリーム)がStream<Double>
にマップされます。
Stream.of("1,2,3,4".split(",")).mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList());
Double::valueOf
を Double::parseDouble
に変更したことに注意してください。これにより、Double.valueOf
から返されたDouble
がボックスから取り出されなくなります。プリミティブdouble
。
しかし、なぜ最初にmapToDouble
を使用しているのですか?次のようにmap
を使用できます。
Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList());