2012-05-18 8 views
0

Comparator를 종료하는 클래스를 만들고 싶습니다. 이 콤퍼레이터는 두 배열을 비교합니다. 배열은 비교 가능한 모든 것을 포함 할 수 있습니다. 다음과 같은 일을하게 해주는 무엇인가 :매개 변수가 배열 인 일반 클래스 만들기

comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5}); 

매개 변수의 유형은 반드시 정수 []가 아닙니다. 그들은 무엇이든 배열 일 수 있습니다.

제네릭을 사용하여 이러한 클래스를 만들 수있는 방법이 있습니까? 또는 내 비교 자 대신 개체를받습니다. 객체를 수신해야하는 경우 배열인지, 요소 내부에서 요소를 가져올 수 있습니까?

+1

비교기에서 무엇을하고 싶습니까? 각 요소를 비교합니까? – Chip

+0

예. 나는 그것을하기 위해 아파치 - 커먼즈를 검색하지만 하나를 찾을 수 없다. 그래서 나는 내 자신을 구현하고있다. 사전 제작 된 제안에 대한 제안은 도움이 될 것입니다! – Rafael

답변

3

배열 자체를 Comparator의 형식 매개 변수로 사용하는 것은 어떻습니까?

public class ArrayComparator<T extends Comparable<? super T>> implements 
     Comparator<T[]> { 
    @Override 
    public int compare(T[] o1, T[] o2) { 
     // TODO 
    } 
} 
2

비교기 매개 변수 유형은 T [] 여야합니다. 여기

은 사용 예입니다 :

public class Test<T> implements java.util.Comparator<T[]> { 

    @Override 
    public int compare(T[] paramT1, T[] paramT2) { 
     return 0; 
    } 

    public static void main(String[] args) { 
     System.out.println(new Test<Integer>().compare(new Integer[] {1,2}, new Integer[] {3,4,5})); 
    } 

} 
+0

OP는 배열의 요소가 자신과 'Comparable'이되어야한다고 생각합니다. – Jeffrey

2

예 수,이 같은 예 :

implements Comparator<T[]> { 
    @Override 
    public int compare(T[] array1, T[] array2) { 
     //compare arrays here 
     return ...; 
    } 

또는 호출 값 유형을 추론하는 것 같은 방법 비교 :

public static <T> int compare(T[] array1, T[] array2) { 
+0

물론 클래스의 정확한 사용법에 따라 달라질 수 있지만, 어떤 점에서이를 지정해야 할 것입니다 ... A 은 Comparator 을 구현합니다. {...는 다음과 같이 지정해야합니다 :'new A '또는' extend A '또는 그와 비슷한 –

+0

Umm @ Vulcan ... 필자는 이클립스에서 직접 붙여 넣었습니다. (보통) 항상 먼저 테스트하고 이번에도 그렇게했습니다. 어쩌면 칩이 그의 코멘트를 삭제 한 이유일까요? –

+0

위대한 두 명의 주석 작성자 (칩 및 불칸)가 주석을 제거 했으므로 여기가 독창물처럼 보입니다. –

관련 문제