java - 将带有映射的对象列表转换为基元数组

标签 java lambda java-8 java-stream

我一直在寻找我需要做的事情的片段,但我无法将它们组合在一起。首先,这是我的目标,简单地说:

Object1
    Object2
        Map<String, Double>

我需要做的是,从 Object1 列表开始,为给定特定键的映射值获取 double[](所有对象在该列表在 map 中具有相同的 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();

关于java - 将带有映射的对象列表转换为基元数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44378294/

相关文章:

java - .jd 文件到底有什么用?

Java - GUI 时钟使用大量 RAM?

java - CompletableFuture API17 的替代品

java - 如果存在 Java 8 的 Optional,则方法返回

Java 8 Map of Collections 从集合中删除元素,如果为空则删除条目

java-8 - 如何使用 CompletionStage 的集合很好地执行 allOf/AnyOf

java - flatMap 保证是惰性的吗?

java - 打印 JTable 时遇到问题

c# - 如何找到最近的日期

c# - 使用嵌套的 LambdaExpressions 编译 LambdaExpression 时,它们也会编译吗?