2009-07-09 2 views
1

Я ищу реализацию java.util.Map, которая имеет метод, который будет возвращать все ключи, сопоставленные с заданным значением, т. Е. На карте имеется несколько ключей. одинаковое значение. Я просмотрел Коллекции Google и Apache Commons и ничего не заметил. Конечно, я мог выполнять итерацию через набор ключей и проверять каждое соответствующее значение или использовать две карты, но я надеялся, что уже есть что-то уже готовое.Ищете реализацию Java Map, которая поддерживает getKeysForValue

ответ

2

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

Конечно, вам нужно будет позаботиться о синхронизации двух структур, IE, когда вы удаляете ключ с карты, вам нужно удалить ключ из набора ключей, сопоставленных со значением в мультимадре ,

Это не кажется сложным в реализации, возможно, немного тяжелым из аспекта служебной информации.

+0

Спасибо, да, я думал об использовании двух карт. Было бы неплохо, если бы была реализация на одной карте, поэтому мне не пришлось бы беспокоиться о синхронизации двух карт. – Joel

+0

Похоже, что реализация не существует, так что это лучший способ пойти. – Joel

1

Что вы ищете, это bidirectional map, для которого есть реализация в commons collections.

+0

На самом деле карта bidi не будет работать. Я редактировал вопрос, чтобы сделать его более ясным, но между ключами и значениями нет 1: 1. – Joel

0

Ваши объекты с ценностью могут иметь свойство (например, типа ArrayList), которое содержит все ключи. Затем вы расширяете HashMap (или любую другую используемую вами карту) и переопределяете так, чтобы при добавлении и объекте для ключа вы также добавляли ключ в список ключей вашего объекта.

0

Я не могу найти готовый класс, поддерживающий значения с несколькими ключами. Однако вы можете повторно реализовать Apache Commons DualHashBidiMap, используя MultiHashMap вместо одного из HashMaps.