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

寻找可深度检测嵌套Map键的Java工具类方法

现成工具类库推荐:嵌套Map深度键检查

当然有现成的工具类库能帮你搞定这个嵌套Map的键检查需求!不用自己手写逻辑还省掉单元测试的功夫,下面几个主流库都能完美适配你的Map<String, Map<String, Object>>(甚至更深嵌套)的场景:

1. Apache Commons Collections 4+

这个老牌工具库的MapUtils类提供了deepContainsKey方法,专门用于递归遍历嵌套的Map、集合等结构,深度查找目标键。它还处理了循环引用、非Map类型值等边缘情况,非常可靠。

示例代码:

import org.apache.commons.collections4.MapUtils;
import java.util.HashMap;
import java.util.Map;

public class DeepContainsDemo {
    public static void main(String[] args) {
        // 构建多层嵌套Map
        Map<String, Object> deepestMap = new HashMap<>();
        deepestMap.put("targetKey", "foundMe");
        
        Map<String, Object> middleMap = new HashMap<>();
        middleMap.put("level2", deepestMap);
        
        Map<String, Object> outerMap = new HashMap<>();
        outerMap.put("level1", middleMap);
        
        // 检查是否包含嵌套的"targetKey"
        boolean containsTarget = MapUtils.deepContainsKey(outerMap, "targetKey");
        System.out.println(containsTarget); // 输出 true
    }
}

只要引入Apache Commons Collections 4.x的依赖,就能直接用这个方法,不用自己处理递归逻辑。

2. Spring Framework 的 NestedMapUtils

如果你已经在使用Spring项目,完全不用额外引入依赖——Spring自带的NestedMapUtils(Spring 5.3+版本提供)专门针对嵌套Map设计,containsKey方法可以直接深度查找目标键。

示例代码:

import org.springframework.util.NestedMapUtils;
import java.util.HashMap;
import java.util.Map;

public class SpringDeepContainsDemo {
    public static void main(String[] args) {
        Map<String, Object> outerMap = new HashMap<>();
        Map<String, Object> innerMap = new HashMap<>();
        innerMap.put("myKey", "testValue");
        outerMap.put("topLevel", innerMap);
        
        boolean hasKey = NestedMapUtils.containsKey(outerMap, "myKey");
        System.out.println(hasKey); // 输出 true
    }
}

这个方法用法简洁,和Spring生态无缝衔接,适合Spring项目直接使用。

备选:自己实现递归逻辑(不推荐,但应急可用)

虽然你更倾向于用现成库,但如果不想引入依赖,也可以快速写个递归方法(不过要注意自己处理循环引用等边界情况):

import java.util.Map;

public class CustomDeepChecker {
    public static boolean deepContainsKey(Map<?, ?> map, Object targetKey) {
        // 先检查当前Map是否包含键
        if (map.containsKey(targetKey)) {
            return true;
        }
        // 遍历所有值,递归检查嵌套Map
        for (Object value : map.values()) {
            if (value instanceof Map<?, ?> nestedMap) {
                if (deepContainsKey(nestedMap, targetKey)) {
                    return true;
                }
            }
        }
        return false;
    }
}

不过还是优先推荐前面的现成库,毕竟它们已经经过充分测试,能处理各种你可能没考虑到的边缘场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:07:17