我有一个HashMap“stateCityMap”,它是一个Map>。密钥是国家,即果阿,喀拉拉邦等,价值观是城市,即Panjim,Margao等。我想检查HashMap中是否存在特定城市,例如.Margao并将该值的相应密钥作为结果..但每次我运行下面的代码。执行else部分(当城市不存在于HashMAp中时)。 city: - 是我传递给这个函数的城市名称
代码:
public String getState(Map<String, List<String>> stateCityMap, String city) throws CityNotFoundException {
HashMap<String, List<String>> g = new HashMap<String, List<String>>(stateCityMap);
if(g.containsValue(city)){
System.out.println("State:- " +g.get(city));
}
else {
throw new CityNotFoundException("City Not Found");
}
return null;
}
为什么这样做?为什么我得错了结果?
答案 0 :(得分:3)
效率不高,但您需要浏览地图中的每个列表:
public String getState(Map<String, List<String>> stateCityMap, String city) throws CityNotFoundException {
for (Map.Entry<String, List<String>> entry : stateCityMap.entrySet()) {
if (entry.getValue().contains(city)) {
return entry.getKey();
}
}
throw new CityNotFoundException("City Not Found");
}
答案 1 :(得分:1)
containsValue方法返回true。
在您的情况下,值类型为List,但您通过传递String调用containsValue方法。所以它总是会返回false。
由于您的值类型为List,因此您将最终迭代所有键和所有值,以查找任何列表中是否存在城市。
最好是维护两张地图。挑战将是确保两个地图始终正确更新(插入,删除,更新)。
希望有所帮助。