Java 将long列表转换为double列表
我不熟悉Streams,我有一个长值列表。我想使用stream将长值列表转换为双值列表 代码如下: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
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);