Я ищу реализацию java.util.Map, которая имеет метод, который будет возвращать все ключи, сопоставленные с заданным значением, т. Е. На карте имеется несколько ключей. одинаковое значение. Я просмотрел Коллекции Google и Apache Commons и ничего не заметил. Конечно, я мог выполнять итерацию через набор ключей и проверять каждое соответствующее значение или использовать две карты, но я надеялся, что уже есть что-то уже готовое.Ищете реализацию Java Map, которая поддерживает getKeysForValue
ответ
Я не знаю, хорошо ли это решение для вас, но вы можете легко реализовать это, используя стандартную карту от ключей до значений и MultiMap от значений до ключа.
Конечно, вам нужно будет позаботиться о синхронизации двух структур, IE, когда вы удаляете ключ с карты, вам нужно удалить ключ из набора ключей, сопоставленных со значением в мультимадре ,
Это не кажется сложным в реализации, возможно, немного тяжелым из аспекта служебной информации.
Что вы ищете, это bidirectional map, для которого есть реализация в commons collections.
На самом деле карта bidi не будет работать. Я редактировал вопрос, чтобы сделать его более ясным, но между ключами и значениями нет 1: 1. – Joel
Ваши объекты с ценностью могут иметь свойство (например, типа ArrayList), которое содержит все ключи. Затем вы расширяете HashMap (или любую другую используемую вами карту) и переопределяете так, чтобы при добавлении и объекте для ключа вы также добавляли ключ в список ключей вашего объекта.
Я не могу найти готовый класс, поддерживающий значения с несколькими ключами. Однако вы можете повторно реализовать Apache Commons DualHashBidiMap, используя MultiHashMap вместо одного из HashMaps.
Спасибо, да, я думал об использовании двух карт. Было бы неплохо, если бы была реализация на одной карте, поэтому мне не пришлось бы беспокоиться о синхронизации двух карт. – Joel
Похоже, что реализация не существует, так что это лучший способ пойти. – Joel