寻找可深度检测嵌套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
相关产品推荐
相关产品推荐

