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

如何匹配两个Map的键后缀并更新MapB的对应值?

实现方案

核心思路

因为明确不存在叶子节点冲突,整体时间复杂度可以做到O(n+m)(n是mapA大小,m是mapB大小),效率足够处理千级数据量:

  1. 先遍历mapA,将每个key按/拆分取最后一段叶子节点作为新key,原value作为值,构建一个临时的叶子节点映射表
  2. 遍历mapB,同样取每个key的叶子节点去临时映射表匹配,匹配到就直接更新mapB的对应value

关键工具方法

提取路径的叶子节点可以单独封装,避免重复代码:

private static String getLeafNode(String path) {
    // 兼容处理末尾带/的异常路径,比如/a/b/c/拆分最后会有空串,先去掉末尾斜杠
    String trimmedPath = path.endsWith("/") ? path.substring(0, path.length() - 1) : path;
    String[] segments = trimmedPath.split("/");
    return segments[segments.length - 1];
}

完整实现代码(Java)

import java.util.HashMap;
import java.util.Map;

public class MapMatchByLeaf {
    public static void updateMapBByLeafMatch(Map<String, String> mapA, Map<String, String> mapB) {
        // 第一步:构建mapA的叶子节点->value 临时映射
        Map<String, String> leafToValueA = new HashMap<>();
        for (Map.Entry<String, String> entry : mapA.entrySet()) {
            String leaf = getLeafNode(entry.getKey());
            leafToValueA.put(leaf, entry.getValue());
        }

        // 第二步:遍历mapB匹配更新
        for (Map.Entry<String, String> entry : mapB.entrySet()) {
            String leafB = getLeafNode(entry.getKey());
            if (leafToValueA.containsKey(leafB)) {
                // 匹配成功,更新mapB的value
                entry.setValue(leafToValueA.get(leafB));
            }
        }
    }

    private static String getLeafNode(String path) {
        String trimmedPath = path.endsWith("/") ? path.substring(0, path.length() - 1) : path;
        String[] segments = trimmedPath.split("/");
        return segments[segments.length - 1];
    }

    // 测试用例
    public static void main(String[] args) {
        Map<String, String> mapA = new HashMap<>();
        mapA.put("/content/common/pqr", "/apps/content/data/abc");

        Map<String, String> mapB = new HashMap<>();
        mapB.put("/parsys/content/banner/pqr", "/apps/comment/data");

        updateMapBByLeafMatch(mapA, mapB);
        // 输出验证结果为/apps/content/data/abc,符合预期
        System.out.println(mapB.get("/parsys/content/banner/pqr"));
    }
}

方案说明

  • 额外做了末尾斜杠的兼容处理,避免路径格式不规范导致匹配失败
  • 千级数据量下完全无性能压力,即使后续数据涨到十万级该方案也足够支撑
  • 因为题目明确没有叶子节点冲突,所以不需要额外处理覆盖、冲突报错逻辑,代码简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:03