基于另一Map查找目标Map缺失条目的问题排查
代码漏检问题排查
直接说你的代码里的核心问题,这几个点导致了漏检甚至逻辑完全错误:
- 遍历对象完全搞反:你要找的是
commonString里没在mapWithMissingCommonStrings中出现的条目,但代码遍历的是commonURIsCls的entry集合,根本没碰commonString,直接导致逻辑走偏,很多该检测的条目根本没被遍历到。 - 判断条件逻辑错误:你的判断条件
!commonString.containsKey(key) && !commonString.containsValue(value),是在找commonURIsCls里那些key和value都不在commonString里的条目,和你原本的需求(找commonString里不在mapWithMissingCommonStrings的条目)完全相反。 - 参数未使用:方法参数
mapWithMissingCommonStrings全程没被用到,等于你根本没拿目标对比集合来做检查。 - containsValue的误用:就算逻辑对了,用
containsValue也不靠谱——Map的containsValue是遍历所有值匹配,效率低不说,如果有多个key对应同一个value,会出现误判(比如map里有其他key对应这个value,就会错误认为当前条目存在)。
修正后的代码示例
如果你的需求是:找出commonString中所有key不存在于mapWithMissingCommonStrings,或者key存在但value不匹配的条目,并存入labeled_class_mappings,可以这么写:
public void compareCommonStrings(Map<String, String> mapWithMissingCommonStrings) { int cntr = 0; // 遍历目标集合commonString的所有条目 for (Map.Entry<String, String> entry : commonString.entrySet()) { String key = entry.getKey().replace("<","").replace(">","").trim(); String value = entry.getValue().replace("<","").replace(">","").trim(); // 检查mapWithMissingCommonStrings中是否没有这个key,或者有key但value不匹配 String existingValue = mapWithMissingCommonStrings.get(key); if (existingValue == null || !existingValue.equals(value)) { labeled_class_mappings.put(key, value); cntr++; } } }
额外注意点
- 如果你只需要检查key是否缺失(不关心value是否匹配),判断条件改成
!mapWithMissingCommonStrings.containsKey(key)即可。 - 处理字符串的
replace和trim要确保两边的Map都做了同样的处理,不然会因为字符串格式不一致导致误判(比如一边没去尖括号,一边去了,就会认为key不存在)。
内容的提问来源于stack exchange,提问作者user23424056
相关产品推荐
相关产品推荐

