You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Map<String, List<MyObject>>的所有值列表合并为单个List<MyObject>

合并Map值集合的实现方案

方案1:Java 8及以上版本(Stream 写法最简洁)

利用flatMap展开嵌套的List集合,一行即可完成合并:

// 返回不可变List(Java 16+ 支持toList()直接调用,低版本可替换为collect(Collectors.toList()))
List<MyObject> mergedList = myMap.values().stream()
    .flatMap(List::stream)
    .toList();

// 如需返回可修改的ArrayList实例,用以下写法
List<MyObject> mergedList = myMap.values().stream()
    .flatMap(List::stream)
    .collect(Collectors.toCollection(ArrayList::new));

方案2:低版本Java兼容写法

不依赖Stream特性,性能和Stream写法一致:

List<MyObject> mergedList = new ArrayList<>();
for (List<MyObject> subList : myMap.values()) {
    mergedList.addAll(subList);
}

原写法错误原因

你之前的写法失效是因为:myMap.values()返回的是Collection<List<MyObject>>类型,直接传入ArrayList构造方法只会把每个子List作为单个元素存入新列表,不会自动展开子List内部的MyObject元素。

性能优化提示

如果对内存占用要求较高,可以提前计算所有子元素总长度,初始化ArrayList时指定容量,避免自动扩容带来的额外开销:

int totalSize = myMap.values().stream().mapToInt(List::size).sum();
List<MyObject> mergedList = new ArrayList<>(totalSize);
// 后续执行addAll或collect操作即可

内容的提问来源于stack exchange,提问作者navig8tr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:27:01