Карта: Как получить все ключи, связанные со значением? - PullRequest
6 голосов
/ 24 октября 2010

Учитывая карту, как мне найти все ключи, связанные с определенным значением?

Например:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 2);
map.put(3, 5);
Collection<Integer> keys = map.values(5); // should return {1, 3}

Я ищу что-то похожее на Google Collections ' BiMap , где значения не являются уникальными.

1 Ответ

12 голосов
/ 24 октября 2010

С простыми java.util.Map реализациями, я боюсь, что вы должны выполнять итерации записей карты и проверять каждое значение:

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  if (entry.getValue().equals(desiredValue) {
    keys.add(entry.getKey());
  }
}

Если вы хотите повысить производительность, вы можете создать параллельное отображение иззначения в списки ключей.Я не знаю ни о какой существующей коллекции, делающей это, но это не должно быть сложно реализовать.

Начиная с Java 8, вы можете использовать map.forEach:

map.forEach((k,val) -> {
      if (val.equals(desiredValue) {
        keys.add(k);
      }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...