2013-04-09 3 views
0

이름, 나이, 주소, 전화 번호 및 이메일과 같은 간단한 속성을 가진 Person 클래스가 있다고 가정합니다.자바 객체의 동등 함

Person 개의 각 개체가 포함 된 Sets 개의 묶음이 있습니다.

동적으로 각 세트에 대해 Set 특정 동등성을 정의하여 중복을 우아하게 제거하고자합니다.

인스턴스의 경우 : 한 세트는 전화를 기준으로 중복 인물을 제거하고 다른 세트는 이메일로 중복 인물을 제거하기를 원합니다.

내가 알고있는 유일한 방법은 하위 클래스 Person에 여러 번 적용하고 내 요구 사항을 기반으로 equals를 재정의하는 것이지만 클래스 수가 폭발적으로 증가 할 수 있습니다.

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) { 
    ... 
} 

}