2012-06-07 3 views
0

에 propertyZ에 의해 다음 propertyY에 의해 다음 propertyX에 의해 선별 다음 클래스 : 하나에 의해 다음 propertyX에 의해 주문되는 클래스의 인스턴스 초래 이는 Comparator을 구성 가겠어요 어떻게구현을 감안할 때 자바

class Boo { 
    private final String propertyX; 
    private final Double propertyY; 
    private final Integer propertyZ; 
} 

propertyY 다음에 Collection.sort(...)Collection<Boo>에 호출 될 때 propertyZ에 의해 호출됩니다.

이동 방법은 Comparator입니까?

+1

의 중복 가능성 [여러 필드에 의해 객체를 비교하는 가장 좋은 방법은?] (http://stackoverflow.com/questions/369512/best-way-to-compare-objects-by-multiple로이 비교기를 사용하여 -fields) – NPE

+0

왜 @sudocode가 그의 대답을 삭제했는지 모르겠습니다. 이 질문에 답하는 [이 우수한 게시물] (http://stackoverflow.com/questions/1421322/how-do-i-sort-a-list-with-multiple-sort-parameters/1421458#1421458)을 지적했습니다. – missingfaktor

+0

이 게시물의 @Yishai의 응답은 사용자 지정 정렬 및 그룹화 정렬 (여러 인수)을 위해 열거 형을 우아하게 사용하는 것을 보여 주며 비교기 연결을 사용합니다. – gunalmel

답변

4

당신이 제안한 것을 그대로 사용하십시오.

Comparator<Boo> booCmp = new Comparator<Boo>() { 
    @Override 
    public int compare(Boo o1, Boo o2) { 
     int cmp = o1.propertyX.compareTo(o2.propertyX); 
     if (cmp == 0) 
      cmp = o1.propertyY.compareTo(o2.propertyY); 
     if (cmp == 0) 
      cmp = o1.propertyZ.compareTo(o2.propertyZ); 
     return cmp; 
    } 
}; 
+0

이 솔루션은 Comparator.compare 메서드에 대한 규칙을 위반하지 않습니까? http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html – auser

+0

비슷하게 'equals'를 구현하지 않으면 내가 생각할 수있는 유일한 것입니다. 너 마음에 뭔가 있니? –

0

@ sudocode는 좋은 대답을 주었지만 나는 너무 많이 생각합니다. propertyX, 그 다음 propertyY을 비교하는 사용자 지정 비교기를 구현하기 만하면됩니다. Collections.sort() 또는 Arrays.sort()