Подтвердить что ты не робот

Есть ли много в коллекции на 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 и наоборот.

Можете ли вы опубликовать ссылку на полированную библиотеку, которая уже включает эту функцию?

4b9b3361

Ответ 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>> или в качестве ссылки.