本文介绍使用 java 8 stream api 快速提取两个 map 中键名交集的简洁方法,通过 `keyset()`、`filter()` 和 `containskey()` 实现零循环、高可读性的键匹配逻辑。
在实际开发中,经常需要比较两个 Map 的键集合,例如校验配置一致性、做数据对账或构建联合查询条件。Java 8 提供了函数式编程能力,让我们能以声明式方式优雅地完成这一任务。
核心思路是:以第一个 Map 的键集为源头,
筛选出同时存在于第二个 Map 中的键。这本质上是求两个键集合的交集(keySet1 ∩ keySet2),但无需显式构造 Set 并调用 retainAll(),Stream 方案更直观且可链式扩展。
以下为推荐实现:
import static java.util.stream.Collectors.toSet; import java.util.Map; import java.util.Set; Mapmap1 = Map.of("abc", 123, "def", 234, "jkl", 567); Map map2 = Map.of("abc", 123, "def", 234, "jddj", 567); Set commonKeys = map1.keySet().stream() .filter(map2::containsKey) // 等价于 key -> map2.containsKey(key) .collect(toSet()); System.out.println(commonKeys); // 输出: [abc, def](顺序不保证,若需有序可用 TreeSet 或 sorted())
✅ 优势说明:
⚠️ 注意事项:
总结:利用 keySet().stream().filter(targetMap::containsKey) 是 Java 8+ 中查找 Map 共有键的标准实践——简洁、安全、符合函数式设计思想。