#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 и включите или исключите объекты в соответствии с вашими требованиями.