Получить ключ от значения в карте с Arraylist? - PullRequest
0 голосов
/ 29 апреля 2020

Я пишу программу на Java. Я решил использовать карту в сочетании с ArrayList.

public static Map<String, List<String>> users = new HashMap<>();

Итак, мой вопрос не так уж и сложен, я думаю: как вы можете видеть, есть ключ (строка), и каждый ключ имеет свой собственный ArrayList. У меня есть метод, который получает одно значение моей карты (пользователи). Метод не так важен. Но теперь я хочу знать, какой ключ (String) принадлежит моему значению, какой метод нашел?

1 Ответ

1 голос
/ 29 апреля 2020

Без поддержки другой коллекции, выступающей в качестве своего рода индекса (возможно, избыточного), нет лучшего способа сделать это, чем перебирать все записи.

Использование потоков

final String searchTerm = "whatever";
final String user = users.entrySet().stream()
    .filter(entry -> entry.getValue().contains(searchTerm))
    .findFirst()
    .map(Map.Entry::getKey)
    .orElseThrow(() -> new RuntimeException("No matching user for " + searchTerm));

Императивный стиль

String user = null;
for (Map.Entry<String, List<String>> entry : users.entrySet())
{
    if (entry.getValue().contains(searchTerm))
    {
        user = entry.getKey();
        break;
    }
}
if (user == null)
{
    throw new RuntimeException("No matching user for " + searchTerm); 
}
...