从列表中的任何值获取密钥

时间:2019-06-21 11:29:55

标签: java java-8

如何从列表中的以下哈希表的任何值中获取密钥?

Map<String, List<String>> map = new HashMap<String, List<String>>();

"car"      : ["toyota", "bmw", "honda"]
"fruit"    : ["apple","banana"]
"computer" : ["acer","asus","ibm"]

如果将值传递为“ ibm”,则需要将密钥获取为“计算机”,对于“ bmw”输入,需要将密钥获取为“汽车”。

我正在使用下面的代码来获取密钥,需要任何简短或更优的选择

map.forEach((k, v) -> {
List<String> list = v;
}

列表中的键

2 个答案:

答案 0 :(得分:2)

对于地图中的每个条目,检查值是否包含您关键字

String value = "ibm";
Optional<String> key = map.entrySet().stream()
            .filter(e -> e.getValue().contains(value))
            .map(Entry::getKey)
            .findFirst();

System.out.println(key.get());

答案 1 :(得分:0)

如果您愿意,可以使用Guava's BiMap

以下是摘自baeldung的示例:

@Test
public void givenBiMap_whenQueryByValue_shouldReturnKey() {
    BiMap<String, String> capitalCountryBiMap = HashBiMap.create();
    capitalCountryBiMap.put("New Delhi", "India");
    capitalCountryBiMap.put("Washington, D.C.", "USA");
    capitalCountryBiMap.put("Moscow", "Russia");

    String keyFromBiMap = capitalCountryBiMap.inverse().get("Russia");
    String valueFromBiMap = capitalCountryBiMap.get("Washington, D.C.");

    assertEquals("Moscow", keyFromBiMap);
    assertEquals("USA", valueFromBiMap);
}