如何从Map <t,list <l>&gt;添加值映射到List <l>?

时间:2017-11-08 15:00:30

标签: java list dictionary

我有一个多图Map<T,List<L>> map,我需要一个列表,其中包含地图中值的所有值,即List<L>。使用map.values()我得到List<List<L>>,但这不是我想要的。

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

1 个答案:

答案 0 :(得分:3)

如果您使用的是Java 8,则可以通过Stream#flatMap在单个L中收集所有List<L>的所有List<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());

否则,可以应用for-each Collection#addAll方法:

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

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