Как я сравниваю объекты в списке массивов друг с другом в Java

#java #spring-boot #jpa

Вопрос:

У меня есть две сущности:
Individual и TaxPayer следующим образом:

 public class Individual {     
   private String firstName;
   private String lastName;
   @OneToOne
   private TaxPayer taxpayer;
   // other fields
}
 

и:

 public class TaxPayer {
   private String phoneNumber;
   private String stateTin;//unique code
   private String email;
   //other fields
}
 

У меня есть список таких людей, как:

 List<Individual> individualList = getAllIndividualsWithDuplicatePhonenumber();
 

Я хочу сравнить имя и фамилию отдельного лица с другими лицами в списке, чтобы я получил список всех лиц, у которых имя и фамилия совпадают с именем и фамилией другого лица или имя отдельного лица совпадает с фамилией другого лица, а фамилия отдельного лица совпадает с именем другого лица.
PS: Организация налогоплательщика охотно выбирается отдельным лицом, поэтому я могу получить доступ к атрибутам налогоплательщика, выполнив individual.getTaxPayer().getPhoneNumber();

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

1. Имейте индивидуальную реализацию хэш-кода, методов equals и сопоставимого интерфейса. Вложите свою логику в эти методы.

2. Пожалуйста, не могли бы вы помочь мне написать логику? @даффимо

3. Кажется странным: вы готовы терпеть код, в котором пользователи инвертируют имя и фамилию.

Ответ №1:

Вам следует прочитать эффективную главу 3 Java Джошуа Блоха, чтобы узнать, как переопределить equals и hashCode .

Попробуйте это:

 public boolean equals(Object other) {
    if (other == this) return true;
    if (other == null || other.getClass() != this.getClass()) return false;
    Individual individual = (Individual) other;
    return ((this.getFirstName().equals(individual.getFirstName() amp;amp; this.getLastName().equals(individual.lastName()) || 
        (this.getFirstName().equals(individual.getLastName() amp;amp; this.getLastName().equals(individual.getFirstName())) 
}
 

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

1. Используя ваш метод equals (), если я передам индивидуальный список, чтобы получить дубликат, например: Индивидуальный список.поток().фильтр(индивидуальный -> //что здесь писать) .сбор(Сборщики. ToList()) как мне применить метод equals() в моем потоке.

2. Вызовите Individual::equals и включите или исключите объекты в соответствии с вашими требованиями.