Java 将具有贴图的对象列表转换为基本体数组

Java 将具有贴图的对象列表转换为基本体数组,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我一直在寻找一些我需要做的事情,但我很难把它们全部放在一起。首先,我的目标是: Object1 Object2 Map<String, Double> 我不知道如何从这里到达基元数组。如果到目前为止一切顺利,我该怎么办?如果有更好的方法来做这件事,我愿意接受建议。非常感谢您的帮助。使用.mapToDouble制作双流: myList.stream() .map(Object1::getObject2) .map(Object2::getMyM

我一直在寻找一些我需要做的事情,但我很难把它们全部放在一起。首先,我的目标是:

Object1
    Object2
        Map<String, Double>

我不知道如何从这里到达基元数组。如果到目前为止一切顺利,我该怎么办?如果有更好的方法来做这件事,我愿意接受建议。非常感谢您的帮助。

使用
.mapToDouble
制作
双流

myList.stream()
    .map(Object1::getObject2)
    .map(Object2::getMyMap)
    .mapToDouble(m -> m.get(key))  // or throw if key is not in map
    .toArray();

小心使用
null
值。若要避免抛出,请执行以下操作:
myList.stream().map(o->o.getObject2().getMyMap().get(key)).filter(d->d!=null).mapToDouble(Double::doubleValue).toArray()
根据OP的描述,抛出可能更合适。如果其中一个映射缺少
,则数据无效,代码应快速失败,而不是返回较短的数组。或者可能是
mapToDouble(m->m.getOrDefault(key,0.0))
。谁知道呢?我们在这里猜测。让OP来决定在给定密钥没有条目的情况下什么更好。
myList.stream()
    .map(Object1::getObject2)
    .map(Object2::getMyMap)
    .mapToDouble(m -> m.get(key))  // or throw if key is not in map
    .toArray();