如何从列表中的以下哈希表的任何值中获取密钥?
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;
}
列表中的键
答案 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);
}