我是Streams的新手,我有一个长值列表。我想使用stream将长值列表转换为双精度值列表。
代码如下:
List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);我想将列表转换为List<double>。谢谢
发布于 2020-01-21 15:26:19
您必须使用map操作符将Long转换为Double,然后使用toList收集器。
List<Double> doubleValues = list.stream()
.map(Double::valueOf)
.collect(Collectors.toList());相反,如果您担心自动装箱的开销,您可以创建一个double数组。这是它看起来的样子。
double[] doubleArr = list.stream().mapToDouble(v -> v).toArray();发布于 2020-01-21 15:28:13
List<Double> collect1 = list.stream()
.mapToDouble(s -> s) // DoubleStream
.boxed() // Stream<Double>
.collect(Collectors.toList()); //collected to List<Double>注意:boxing()是开销。
另一种方式,没有boxing()
List<Double> listDouble = new ArrayList<>();
list.stream().mapToDouble(s->s).forEach(k->listDouble.add(k));发布于 2020-01-21 15:28:44
试着做这样的事情:
List<Double> doubles = list.stream()
.map(e -> Double.valueOf(e))
.collect(Collectors.toList());解释
list.stream().这使您可以创建(并迭代)一个流。
map(e -> Double.valueOf(e))您遍历的每个(长)元素都将被映射到一个双精度
.collect(Collectors.toList());这会将它映射到一个List<Double>。
https://stackoverflow.com/questions/59836013
复制相似问题