Получить ключ от любых значений в списке - PullRequest
1 голос
/ 21 июня 2019

Как получить ключ из любых значений в списке для приведенного ниже хэш-карты?

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 ]

2 голосов
/ 21 июня 2019

для каждой записи в карте проверьте, содержит ли значение ваше ключевое слово

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

System.out.println(key.get());
0 голосов
/ 21 июня 2019

Если вы хотите быть модным, вы можете использовать BiavaMap Guava .

Вот пример, взятый из 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...