2017-12-25 1 views
1

2 차원 배열이 있고 그것을 세그먼트 (이미 정의 된 클래스) 유형의 ArrayList에 채 웁니다. 오라클 순서로 각 객체의 두 번째 요소를 기반으로 Arraylist를 정렬하고 싶습니다. 나는 그것을 정렬 비교 클래스를 사용하여이 link을 확인했지만 그것은 나와 함께 작동하지 않습니다 그리고 그것은Integer 속성을 사용하여 목록을 정렬하는 동안 int를 참조 해제 할 수 없습니다.

INT는

오류를 역 참조 할 수없는 나에게 제공합니다.

다음은 object.getR() 나에게 각 개체의 중간 요소를 제공한다는 내 코드

노트입니다. 예를 들어, 세그먼트 x= (6,8,4)의 객체는 x.gerR() 나에게

int[][] input = { 
    {0, 3, 3}, {3,5,2}, {6,8,4}, {9,11,3}, {2,4,4}, {5,6,3}, {7,8,3},{9,12,1} 
}; 

ArrayList<Segment> data = new ArrayList<>(); 

for (int[] input1 : input) { 
    data.add(new Segment(input1[0], input1[1], input1[2])); 
} 
Collections.sort(data, new Comparator<Segment>() { 
    @Override 
    public int compare(Segment lhs, Segment rhs) { 
     return lhs.getR().compareTo(rhs.getR()); 
    } 
}); 
+1

"하지만 나와 함께 작동하지 않습니다"당신을 위해 방법을 정확하게 작동하지 않습니다 또한 지금 우리가 같은 코드를 작성할 수 sort(Comparator) 방법을 나열? 오류/예외/예상과 다른 결과가 나타 납니까? (오름차순 대신 내림차순처럼)? – Pshemo

+0

실제 오류 메시지를 게시하십시오. – bhspencer

+0

문제는 정렬과 관련이 없습니다. 컴파일 오류입니다. – davidxxx

답변

0

int cannot be dereferenced 8. 제안 값을 제공하는 getR() 반환 int하지 Integer (제목이 시사하는 것에도 불구하고). int프리미티브 유형이므로 compareTo과 같은 메소드가 없습니다. int 값을 비교하는 가장 쉬운 방법은 Integer.compare(a, b)입니다 (기본값은 오름차순에 따라 결과를 반환하며, 내림차순 Integer.compare(b, a)에 대한 결과를 얻으려는 경우).

그래서

return lhs.getR().compareTo(rhs.getR()); 


return Integer.compare(lhs.getR(), rhs.getR()); 

에이 BTW 자바 (8) 이후 우리는 람다 및 방법 참조를 사용하여 변경할 수 있습니다.

data.sort(Comparator.comparingInt(Segment::getR)); 

대신

Collections.sort(data, new Comparator<Segment>() { 
    @Override 
    public int compare(Segment lhs, Segment rhs) { 
     return Integer.compare(lhs.getR(), rhs.getR()); 
    } 
}); 
관련 문제