【问题标题】:How to add values from Map<T,List<L>> map to List<L>? [duplicate]如何将 Map<T,List<L>> 映射中的值添加到 List<L>? [复制]
【发布时间】:2017-11-08 15:00:29
【问题描述】:

我有一个多映射Map&lt;T,List&lt;L&gt;&gt; map,我需要一个包含映射中所有值的列表,即List&lt;L&gt;。使用map.values() 我得到List&lt;List&lt;L&gt;&gt;,但这不是我想要的。

有人知道没有循环的干净解决方案吗?

【问题讨论】:

  • 如果你使用的是 Java 8,你可以使用 Stream
  • map.values().stream().flapMap(l -&gt; l.stream()).collect(Collectors.toList());
  • 简单搜索“java list of list to list”就能找到答案。提问前先搜索。
  • 寻找地图和多地图 :) 但我确定我应该学习我的搜索技能!
  • 您应该将此问题标记为重复问题。

标签: java list dictionary


【解决方案1】:

如果您使用的是 Java 8,则可以通过 Stream#flatMap 在单个 List&lt;L&gt; 中收集所有 List&lt;L&gt;s 中的所有 L 值:

final List<L> list = map
        // get a Collection<List<L>>
        .values()
        // make a stream from the collection
        .stream()
        // turn each List<L> into a Stream<L> and merge these streams
        .flatMap(List::stream)
        // accumulate the result into a List
        .collect(Collectors.toList());

否则,可以应用带有Collection#addAllfor-each 方法:

final List<L> list = new ArrayList<>();

for (final List<L> values : map.values()) {
    list.addAll(values);
}

【讨论】:

  • @DavidPérezCabrera 这是一个答案,而不是评论。
  • 好吧,说不定得说java 8的需求和流API了
  • @DavidPérezCabrera,我提到了Java 8,并添加了JDK
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2022-12-17
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多