Есть ли много в коллекции на Java, используя Generics (Domain Model, а не Persistence Layer)?
Кажется, я использую неправильные условия поиска для этого в Google...
Я написал общий класс для ассоциаций "многие-ко-многим", но я предполагаю, что это уже сделано. Весьма вероятно, что он существует в реализации намного лучше, чем мой собственный. Это мой первый набег на создание родового класса.
Для лучшего представления о том, что я ищу, я включаю некоторые собственные фрагменты:
Я поддерживал его с помощью двух хэш-карт:
private final Map<T, List<S>> ssForTs = new HashMap<T, List<S>>();
private final Map<S, List<T>> tsForSs = new HashMap<S, List<T>>();
Вот экземпляр:
new ManyToManyAssociations<Integer, Integer>();
Некоторые доступные методы:
- public void addAssociation (T t, S s)
- public void removeAssociation (T t, S s)
- открытый список <T> getListOfTs()
- открытый список <S> getListOfSs()
- открытый список <T> getTsForSs (S s)
- открытый список <S> getSsForTs (T t)
Имена методов довольно плохие... Извиняюсь.
Основное использование:
Я могу легко найти все S для T и наоборот.
Можете ли вы опубликовать ссылку на полированную библиотеку, которая уже включает эту функцию?
Ответы
Ответ 1
До сих пор это был менее тривиальный вопрос, чем я думал. Два расширения Java Collections, которые я знаю из верхней части моей головы, - это Google, упомянутый duffymo, и Apache Commons Collections. Также нет карты "много-ко-многим". В терминологии Google это будет BiMultiMap
; в Apache, это будет BidiMultiMap
или MultiBidiMap
.
Ответ 2
Похоже, Apache Commons Multimap может быть полезно.
РЕДАКТИРОВАТЬ:, кроме этого один-ко-многим, а не многим-ко-многим. Тем не менее, это может быть удобно использовать вместо ваших Map<T, List<S>>
и Map<S, List<T>>
или в качестве ссылки.