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

如何用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);
    }
}

逻辑说明

  1. 从map1的键集合启动Stream,这样只需遍历其中一个Map的键,效率更直观
  2. 第一个filter用方法引用map2::containsKey快速筛选出两个Map共有的键
  3. 第二个filter校验键对应的值是否相等——这里用equals而非==,避免Integer自动装箱导致的对象引用不相等问题(比如值超出-128到127范围时)
  4. 最后用Collectors.toSet()把符合条件的键收集成Set返回,结果就是你需要的abc和def

如果想基于map2的键遍历,只需把map1.keySet()换成map2.keySet(),同步调整过滤条件里的Map引用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:49