如何用Java 8找出两个Map中键值匹配的所有键
找出两个Map中键值均匹配的键(Java 8实现)
要找出两个Map里键存在且对应值完全相同的键,用Java 8的Stream API可以很简洁地实现,直接上代码:
import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; public class MapMatchExample { public static void main(String[] args) { // 初始化第一个Map Map<String, Integer> map1 = new HashMap<>(); map1.put("abc", 123); map1.put("def", 234); map1.put("jkl", 567); // 初始化第二个Map Map<String, Integer> map2 = new HashMap<>(); map2.put("abc", 123); map2.put("def", 234); map2.put("jddj", 567); // 核心逻辑:筛选匹配的键 Set<String> matchingKeys = map1.keySet().stream() // 先过滤出在map2中存在的键 .filter(map2::containsKey) // 再过滤出键对应值相等的条目 .filter(key -> map2.get(key).equals(map1.get(key))) // 收集为Set集合 .collect(Collectors.toSet()); // 输出结果:[abc, def] System.out.println(matchingKeys); } }
逻辑说明
- 从
map1的键集合启动Stream,这样只需遍历其中一个Map的键,效率更直观 - 第一个
filter用方法引用map2::containsKey快速筛选出两个Map共有的键 - 第二个
filter校验键对应的值是否相等——这里用equals而非==,避免Integer自动装箱导致的对象引用不相等问题(比如值超出-128到127范围时) - 最后用
Collectors.toSet()把符合条件的键收集成Set返回,结果就是你需要的abc和def
如果想基于map2的键遍历,只需把map1.keySet()换成map2.keySet(),同步调整过滤条件里的Map引用即可。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

