Когда вы переопределяете метод equals внутри любого объекта, вы можете точно проверить равенство этого объекта с другим , даже если они находятся где-то в памяти в другом месте.
Таким образом, приведенный ниже код
myList.contains (myObject);
ответит, если в myList есть объект, который метод equals возвращает true с myObject,
Во всех основных IDE (таких как intelliJ, netbeans, eclipse и т. Д.) IDE поможет вам точно переопределить метод equals.вот автоматически сгенерированный код для переопределения метода equals с использованием intelliJ IDE
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Details details = (Details) o;
return Objects.equals(name, details.name) &&
Objects.equals(email, details.email);
}
Теперь, если вы хотите избежать дублирования, добавляемого в ваш список, вы должны использовать Set вместо List . A Set добавит новый элемент , если комбинация из hashCode и равно метод отличается (сравнивая существующий объект и вновь предназначенный для добавления объекта)
Поэтому мы должны переопределить метод hashCode (сгенерированный IntelliJ IDE) , если мы хотим использоватьвариант Set class :
@Override
public int hashCode() {
return Objects.hash(name, email);
}
Теперь, если вы создадите Set и попытаетесь добавить два объекта с похожим именем и адресом электронной почты внутри этого Set, набор будет только добавлятьпервое уникальное имя и адрес электронной почты, даже если другие поля второго объекта имеют разные значения
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class Details {
String name;
String age;
String email;
String location;
public Details(String name, String age, String email, String location) {
this.name = name;
this.age = age;
this.email = email;
this.location = location;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Details details = (Details) o;
return Objects.equals(name, details.name) &&
Objects.equals(email, details.email);
}
@Override
public int hashCode() {
return Objects.hash(name, email);
}
@Override
public String toString() {
return String.format("(name: %s, age: %s, email: %s, location: %s)", name, age, email, location);
}
public static void main(String[] args) {
Set<Details> mySet = new HashSet<>();
mySet.add(new Details("Mehdi", "12", "123@xyz.com", "Los Angeles"));
mySet.add(new Details("Mehdi", "34", "123@xyz.com", "Las Vegas"));
System.out.println(mySet);
}
}
Это целое тестовое приложение. Существуетчто-то еще, что стоит упомянуть.если в любом случае вы сохранили свои данные в списке и хотите удалить дубликаты в соответствии с вашими правилами (бывшее имя, адрес электронной почты), вы можете попробовать этот подход:
Set<Details> mySet = new HashSet<>(myList);
КакойmyList - это ваш список. , поэтому в вашем приложении это будет выглядеть так:
public static void main(String[] args) {
List<Details> myList = new ArrayList<>();
myList.add(new Details("Mehdi", "12", "123@xyz.com", "Los Angeles"));
myList.add(new Details("Mehdi", "34", "123@xyz.com", "Las Vegas"));
Set<Details> mySet = new HashSet<>(myList);
System.out.println(mySet);
}
и вот результат без дубликатов:
[(name: Mehdi, возраст: 12 лет, электронная почта: 123@xyz.com, местоположение: Лос-Анджелес)]