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

Java Stream中如何将Map的值(集合)收集为单个集合?

合并Map中所有Set集合的最简实现方式

给定结构:

Map<Integer, Set<Integer>> structureIdWithUserIds

要把这个Map里所有值对应的Set<Integer>合并成一个统一的Set<Integer>,Java 8及以上版本里最简洁的实现是用Stream API:

Set<Integer> mergedUserIds = structureIdWithUserIds.values().stream()
    .flatMap(Set::stream)
    .collect(Collectors.toSet());

代码说明

  • structureIdWithUserIds.values():获取Map中所有的Set<Integer>集合
  • stream():将集合转为Stream流
  • flatMap(Set::stream):把每个Set的元素平铺成单个元素的流(相当于把多个小流合并成一个大流)
  • collect(Collectors.toSet()):将流中的所有元素收集成一个新的Set集合

如果需要保留元素的插入顺序,可以把收集器换成Collectors.toCollection(LinkedHashSet::new):

Set<Integer> mergedUserIds = structureIdWithUserIds.values().stream()
    .flatMap(Set::stream)
    .collect(Collectors.toCollection(LinkedHashSet::new));

要是用Java 8之前的版本,只能用循环遍历的方式,代码会繁琐一些:

Set<Integer> mergedUserIds = new HashSet<>();
for (Set<Integer> userIdSet : structureIdWithUserIds.values()) {
    mergedUserIds.addAll(userIdSet);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:21:02