Есть ли способ связать ArrayList с другим ArrayList с отношением один ко многим? - PullRequest
2 голосов
/ 12 мая 2019

Мой вопрос заключается в том, что если у меня есть два класса с именами Person и Book и с ArrayList в каждом классе, Person List, имеющийсписок людей и Книга , имеющая список книг.Можно ли сделать так, чтобы у каждого Персона мог быть свой список Книги ?

Скажите, что у меня есть Персона Класс кактакие:

List<Person> person = new ArrayList<>();

Person(int name, int lastName, int age){
   //initialize variables
}

и Книга Класс как таковой:

List<Book> book = newArrayList<>();

Book(int id, int title, int authorLastName){
   //initialize variables
}

Как бы я мог дать каждому человеку своесписок книг с полями и методами, установленными как приведенный выше код?

Ответы [ 3 ]

2 голосов
/ 12 мая 2019

В классе Person вместо List<Book> используйте Map<Person,List<Book>>, чтобы у каждого человека был список книг.Для этого вам необходимо переопределить метод equals() и hashCode() в классе person, чтобы вы могли поддерживать уникальные объекты Person в качестве ключей в Map

Person

public class Person   { 

    private String name; 
    private String lastName;
    private int age
    // getters, setters , no arg and all arg constructor   

    @Override
    public boolean equals(Object obj) 
    { 
        if(this == obj) 
            return true; 


        if(obj == null || obj.getClass()!= this.getClass()) 
            return false; 

        // type casting of the argument.  
        Person per = (Person) obj; 
          // check conditions based on requirement 
        return (per.name.equals(this.name)  && per.age == this.age); 
    } 
    @Override
    public int hashCode() 
    { 
         // generate hashcode based on properties so that same person will have same hashcode
         return this.age; 
     }  
} 
0 голосов
/ 12 мая 2019

Попробуйте использовать объект Map вместо 2 ArrayLists. Например, у вас может быть объект Map, который связывает строки с целыми числами, которые будут инициализированы следующим образом: new Map<Integer, String>() Обратите внимание, что первый тип данных - это ключ, а второй - тип отображаемых значений. Вы можете найти больше информации, обратившись к Java API.

0 голосов
/ 12 мая 2019

Вы можете сделать так, чтобы класс Person взял List<Book>, чтобы у каждого человека был свой список книг.

Person(int name, int lastName, int age, List<Book> books){
   //initialize variables
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...