Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将long列表转换为double列表_Java_Java 8_Java Stream - Fatal编程技术网

Java 将long列表转换为double列表

Java 将long列表转换为double列表,java,java-8,java-stream,Java,Java 8,Java Stream,我不熟悉Streams,我有一个长值列表。我想使用stream将长值列表转换为双值列表 代码如下: List<Long> list = new ArrayList<>(); list.add(4L); list.add(92L); list.add(100L); List List=new ArrayList(); 列表。添加(4L); 增加(92L); 列表。添加(100L); 我想将列表转换为列表。谢谢您必须使用map操作符将Long转换为Double,然后使用t

我不熟悉Streams,我有一个长值列表。我想使用stream将长值列表转换为双值列表

代码如下:

List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);
List List=new ArrayList();
列表。添加(4L);
增加(92L);
列表。添加(100L);

我想将列表转换为
列表
。谢谢

您必须使用
map
操作符将
Long
转换为
Double
,然后使用
toList
收集器

List<Double> doubleValues = list.stream()
    .map(Double::valueOf)
    .collect(Collectors.toList());
List<Long> longs = new ArrayList<>();
    longs.add(2316354L);
    longs.add(2456354L);
    longs.add(888354L);

    List<Double> doubles = longs.stream().mapToDouble(e->e).boxed().collect(Collectors.toList());

尝试以下几点:

List<Double> doubles = list.stream()
         .map(e -> Double.valueOf(e))
         .collect(Collectors.toList());
这使您可以创建(并迭代)流

map(e -> Double.valueOf(e))
您迭代的每个(长)元素都将映射到一个Double

.collect(Collectors.toList());

这将它映射到一个
列表

您必须使用MapToDouble操作符将Long转换为Double,然后使用toList收集器

List<Double> doubleValues = list.stream()
    .map(Double::valueOf)
    .collect(Collectors.toList());
List<Long> longs = new ArrayList<>();
    longs.add(2316354L);
    longs.add(2456354L);
    longs.add(888354L);

    List<Double> doubles = longs.stream().mapToDouble(e->e).boxed().collect(Collectors.toList());
List longs=new ArrayList();
增加(2316354L);
增加(2456354L);
增加(888354L);
List doubles=longs.stream().mapToDouble(e->e).boxed().collect(Collectors.toList());

您可以在不装箱
long
double
值的情况下使用以下方法执行此操作:

您还可以通过Java Streams和Eclipse集合将
列表转换为
双列表来实现这一点:

List<Long> list = Arrays.asList(4L, 92L, 100L);
DoubleList doubles = DoubleLists.mutable.withAll(
        list.stream().mapToDouble(Long::doubleValue));

Assert.assertEquals(DoubleLists.mutable.with(4.0, 92.0, 100.0), doubles);
List List=Arrays.asList(4L、92L、100L);
DoubleList doubles=DoubleList.mutable.withAll(
list.stream().mapToDouble(Long::doubleValue));
Assert.assertEquals(doubleList.mutable.with(4.0,92.0,100.0),double);

注意:我是Eclipse集合的提交者

对列表进行流式处理,将值映射到double并在列表中收集它们…
list collect1=list.Stream().mapToDouble(s->s.boxed().collector(Collectors.toList())Nit:您无法获得
列表
!你可以得到的可能是
List
double[]
。@Holger
.map(s->s)
将给出
,这是我不想要的,尽管我可以通过
map(e->double.valueOf(e))
来获得
,然后收集它,但其他人已经在回复中发布了,因此,我使用
.mapToDouble(s->s).boxed()
提供了一种替代解决方案。我还添加了一个没有
.boxing()
Ok的解决方案,因为
.mapToDouble(s->s)
是隐式执行
(double)s.longValue()。您可以改为执行
.map(Long::doubleValue)
。但我不建议不惜一切代价避免
.boxed()
,在每种变体中都会发生装箱,在
forEach
中进行装箱是最糟糕的。您可以通过
List collect2=List.stream().mapToDouble(s->s)将
DoubleStream
直接收集到
列表中,但拳击还是不可避免地存在,结果是
列表
是一个拳击双打列表。@Holger,我明白你的意思。在这种情况下,拳击是不可避免的,它要么隐式发生,要么显式发生。我只是深思熟虑地给出我的答案,为观众提供一种不同的口味。
List<Long> longs = new ArrayList<>();
    longs.add(2316354L);
    longs.add(2456354L);
    longs.add(888354L);

    List<Double> doubles = longs.stream().mapToDouble(e->e).boxed().collect(Collectors.toList());
LongList longs = LongLists.mutable.with(4L, 92L, 100L);
DoubleList doubles = longs.collectDouble(l -> l, DoubleLists.mutable.empty());

Assert.assertEquals(DoubleLists.mutable.with(4.0, 92.0, 100.0), doubles);
List<Long> list = Arrays.asList(4L, 92L, 100L);
DoubleList doubles = DoubleLists.mutable.withAll(
        list.stream().mapToDouble(Long::doubleValue));

Assert.assertEquals(DoubleLists.mutable.with(4.0, 92.0, 100.0), doubles);