2013-04-09 2 views
0

Предположим, у меня есть класс Person с простыми атрибутами как имя, возраст, адрес, телефон и адрес электронной почты.Динамическое равенство для java-объектов

У меня есть группа Sets, каждая из которых содержит Person объектов.

Я хотел бы динамически определить Set конкретное равенство для каждого набора, чтобы элегантно удалить дубликаты.

Для экземпляра: Я хочу, чтобы один набор удалял дубликатов лиц по телефону, а другой - для удаления дубликатов объектов с помощью электронной почты.

Единственный способ, о котором я знаю, заключается в подклассе Person многократно и переопределить равные на основе моего требования, но это приведет к взрыву в количестве классов.

Это разрешено в случае Comparators. Я могу определить столько анонимных компараторов для того же самого объекта, который мне нужен/нужен.

В частности, я хочу понять, почему в Java мы можем иметь только одно определение для равенства для объекта, но можем определить несколько компараторов?

Что было бы лучшим способом в этом случае?

ответ

0

Как насчет использования карты вместо набора? Ключ карты определяет атрибут, на котором определена уникальность, а значения карты представляют собой набор объектов с уникальным ключом.

-1

Я бы написал как класс DublicateRemover. Этот класс будет содержать логику удаления дубликатов для определенных полей. например:

public class DublicateRemover{ 
public static Set<Person> removeDublicateByPhone(Set<Person> persons, Set<Person> persons2) { 
    ... 
} 
public static Set<Person> removeDublicateByName(Set<Person> persons, Set<Person> persons2) { 
    ... 
} 

} 
Смежные вопросы