Двунаправленный сбор в java

#java #collections

#java #Коллекции

Вопрос:

У меня есть информация о многих связанных объектах со мной.

Я хотел бы показать пользователю список «учеников», и если пользователь выберет ученика, покажите его учителям.

И наоборот, пользователь может выбрать просмотр списка учителей, и он / она может выбрать учителя, чтобы увидеть всех учеников, которых преподает этот учитель.

Я ищу класс Java collection (встроенный в java или сторонний) для представления таких данных, чтобы я мог запрашивать учителей на основе student или наоборот.

Карта Bidi подходит довольно близко, но она обеспечивает соотношение 1: 1. У меня есть отношения «многие ко многим».

Какие-нибудь подсказки?

Ответ №1:

я думаю, вы не смогли бы сделать это с помощью map. самым простым способом было бы создать класс Student и класс Teacher. оба они могут иметь такой метод, как addTeacher (Учитель-учитель) / addStudent(студент-студент). Таким образом, каждый объект Student знает, что это учителя, и каждый объект Teacher знает, что это студент.

Ответ №2:

Я не уверен, что это то, что вы ищете, но вы можете взглянуть на Guava BiMap

Комментарии:

1. BiMap — это то же самое, что и BidiMap… Он обеспечивает ассоциацию 1: 1.

2. Я вижу, вы рассматривали возможность создания композиции объектов.. например, Teacher содержит List<Student> и Student содержит List<Teacher> в качестве объектной модели.

Ответ №3:

Разве этого недостаточно?

 Map<Student, Set<Teacher>> studentsToTeachers;
Map<Teacher, Set<Student>> teachersToStudents;
  

Это не единая коллекция, но это решило бы вашу проблему, при условии, что ваша реализация была правильной.

Комментарии:

1. Верно… Этого было бы достаточно, и это то, что я сделал в настоящее время. Но .. Это означает, что теперь у меня есть 2 коллекции и … что еще хуже .. информация повторяется.. Учащиеся и учителя будут иметь информацию об учителях так же, как и в teachersToStudents.