从HashMap中的指定值获取密钥

时间:2016-07-09 04:00:31

标签: java collections hashmap

我有一个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;
}

为什么这样做?为什么我得错了结果?

2 个答案:

答案 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,因此您将最终迭代所有键和所有值,以查找任何列表中是否存在城市。

最好是维护两张地图。挑战将是确保两个地图始终正确更新(插入,删除,更新)。

希望有所帮助。