Java 如何将DoubleStream收集到列表

Java 如何将DoubleStream收集到列表,java,java-8,java-stream,collect,Java,Java 8,Java Stream,Collect,我有以下代码: Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList()); 我想返回列表 这段代码无法编译 我看到了错误: Error:(57, 69) java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types; required: j

我有以下代码:

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList());
我想返回
列表

这段代码无法编译

我看到了错误:

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)
错误:(57,69)java:java.util.stream.DoubleStream接口中的方法collect无法应用于给定类型;
必需:java.util.function.Supplier、java.util.function.ObjDoubleConsumer、java.util.function.BiConsumer
找到:java.util.stream.Collector
原因:无法推断类型变量R
(实际参数列表和正式参数列表长度不同)
如何解决此问题?

您可以使用。这将
双流
(原语双流,由返回)映射到

请注意,我改为:这可以防止将
Double.valueOf
返回的
Double
解除绑定到原语
Double

但是,为什么要首先使用
mapToDouble
?您可以像这样使用
map

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

为什么要使用
mapToDouble
是否要将其直接收集到列表中?只需使用
map
。你想做转换
String->Double->Double->Double
,而
String->Double
就足够了。有什么奇怪的?您正在提供一个函数
String->Double
,如果您想将它收集到
列表中,它必须是
Double
。Alexis C.DoubleStream原语流吗?…对于可能更大的流,我建议使用
Pattern.compile(“,”).splitAsStream(“1,2,3,4,…)
因为创建流不需要填充数组。@Holger,另一方面
。split(“,”
是一种快速路径,根本不创建regexp对象和
匹配器。尚不清楚
splitAsStream
在哪些令牌数量上优于
字符串。split
…@Tagir Valeev:通常情况下,您不知道“大数”阈值。但是很明显,随着生成的子字符串数量的不断增加,您可以忽略单个模式/匹配器对象的开销。嗯,为什么不使用
Stream.of(1,2,3,4)
并完全跳过拆分呢?@Louis Wasserman:因为结果被收集到
列表中,所以使用
数组.asList(1,2,3,4)
会更简单,省去了整个流的内容。但是,对于这个流问题,它不再是有用的示例代码。除此之外,
Stream.of(1,2,3,4)
并没有您想象的那么有效。由于这是一个varargs方法调用,因此生成的代码在调用
Stream.of
之前创建并填充一个数组。相反,
“1,2,3,4”
是一个常量,由一条指令加载,拆分发生在JRE库代码中…
Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList());