2017-04-21 6 views
0

사용자 지정 비교기를 만들었지 만 collections.sort를 사용하는 방법을 알고 있지만 두 개체와 함께 사용하는 방법을 알고 싶습니다.단일 개체에서 사용자 지정 비교기 사용

그래서 내 사람 클래스의 비교 코드는 기본 compartor 잘하지만 내가 어떻게 사용자 지정이

//Default 
int result = p.compareTo(p4); 

//Not sure how to use this one 
int result2 = p.compareTo(nameComparator(p4)); 

페이지와 같은 하나 뭔가를 사용합니까 및 사용이

//Default comparator by score 
    @Override 
public int compareTo(Person p) 
{ 
    return Double.compare(p.score, score); 
} 
//Custom comparator by name 
static Comparator<Person> nameComparator() 
{ 
    return (Person o1, Person o2) -> o1.getName().compareToIgnoreCase(o2.getName());  
} 

처럼 보인다 p4는 인물 오브젝트

답변

1

Comparator<Person>은 방법이 compare(Person, Person) 인 클래스입니다. 당신이 natural ordering comparator와 또한 "기본"예 할 수 있습니다

int result2 = nameComparator().compare(p, p4); 

참고 :

int result = Comparator.naturalOrder().compare(p, p4); 

이 동일

그래서, 단지 매개 변수로 두 개의 인스턴스를 전달,이 메소드를 호출 p.compare(p4).

+0

감사합니다. 내가 가지고 있었던 다른 문제는 내 Comparator가 public이 아니므로 클래스 외부에서 액세스 할 수 없었습니다. –

+0

"클래스 외부에서 액세스 할 수 없었습니다" 수업 외부에서 접근하기; 패키지 밖이 아닙니다. –

+0

아 맞습니다. 예, 테스트 패키지에서 액세스하려고 했으므로 방금 공개했습니다. 그 일에 어떤 문제가 있습니까? –