将映射列表转换为映射到原始数组
问题描述:
我一直在寻找我需要做的事情,但我无法将它们放在一起。首先,这是我的目的,简单地说:将映射列表转换为映射到原始数组
Object1
Object2
Map<String, Double>
我需要做的是,开始的Object1
列表,获取给定一个特定的键映射的值double[]
(中的所有对象列表在地图中具有相同的N个键)。
这里是我开始尝试:
myList.stream().map(Object1::getObject2).map(Object2::getMyMap).map(m -> m.get(key).collect(Collectors.toCollection(ArrayList::new))
我不知道如何从这里到基本数组。如果目前为止这很好,我该从哪里出发?如果有更好的方法来做这件事,我愿意接受建议。任何帮助表示赞赏,谢谢。
答
使用.mapToDouble
做出DoubleStream
:
myList.stream()
.map(Object1::getObject2)
.map(Object2::getMyMap)
.mapToDouble(m -> m.get(key)) // or throw if key is not in map
.toArray();
慎用'null'值。 – lexicore
要不抛出,请执行:myList.stream()。map(o - > o.getObject2()。getMyMap()。get(key))。filter(d - > d!= null).mapToDouble(Double :: doubleValue).toArray()' – Andreas
根据OP的描述,抛出可能更合适。如果其中一个映射遗漏了'key',则数据无效,代码应该快速失败,而不是返回更短的数组。 – Misha