【问题标题】:How to convert the values of a Map of List to a single List如何将列表映射的值转换为单个列表
【发布时间】:2017-08-24 17:21:48
【问题描述】:

如何将Map<Object1, List<Object2>> 的值转换为List<Object2> 的最佳(高效且简单)方法。我是否应该简单地遍历所有条目并将 adAll 项目添加到列表中?

【问题讨论】:

    标签: java performance dictionary data-structures java-stream


    【解决方案1】:

    这是第三种方法,因此您不需要创建 ArrayList,这正是您实际要求的。这是使用流的正确方法,因为您不会更改任何对象的状态。

    List<Object2> values = myMap.values()
                                .stream()
                                .flatMap(Collection::stream)
                                .collect(Collectors.toList());
    

    【讨论】:

    • 需要 Java 8。
    • 这将返回一个 List> 因为 myMap.values 是一个 Collection>
    • 哦,好的,谢谢。我没有看到我修改的 List
    【解决方案2】:

    使用 addAll 的一个选项。

    List<Object2> list = new ArrayList<>();
    myMap.values().forEach(list::addAll);
    

    【讨论】:

    • 列表没有变化。
    【解决方案3】:

    刚刚找到:

     List<Object2> list = myMap.values()
                               .stream()
                               .flatMap(item -> item.stream())
                               .collect(Collectors.toList()));
    

    【讨论】:

    • 我误读了您的要求,并删除了我的答案。我以为你真的想要一个列表列表。我认为您提供的方法可能是最有效的方法之一,除非有一些巧妙的技巧。
    • 流不应该被用来改变另一个对象的状态。
    • 刚刚修复了答案
    • 我们的答案现在基本一致了。
    • 现在它们是相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2022-10-02
    • 2021-02-16
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多