2014-04-12 2 views
0

int 값으로 Listview를 정렬하고 싶습니다. 비슷한 질문 및 솔루션을 살펴본 후 이와 같은 작업을 수행했지만 listView를 내림차순으로 정렬하지 않습니다 (아무 것도 btw가 발생하지 않음). arrayList에는이 객체가 "rating"이라는 필드를 가진 객체가 있습니다. 다음은 코드입니다.정렬 arraylist. int 값으로 비교

public class GifModel implements Comparable<GifModel>, Comparator<Integer>{ 
....... 
....... 

@Override 
    public int compare(Integer lhs, Integer rhs) { 
     // TODO Auto-generated method stub 
     return lhs.intValue() > rhs.intValue() ? 1:0; 
    } 

} 

주요 활동. "ratingSort"는 목록입니다.

ratingSort = new ArrayList<GifModel>(list); 

    Collections.sort(ratingSort, new Comparator<GifModel>() { 
     @Override 
     public int compare(GifModel lhs, GifModel rhs) { 
     return lhs.compare(lhs.getRating(),rhs.getRating()); 
     } 

     }); 
+0

는 lhs''와 같은 구문 오류를 얻을 것이며,'rhs'는 프리미티브 없습니다. –

답변

2

이로 정렬 비교기를 변경하고 당신은 갈 수 있어야한다 : 그 @nKn

Collections.sort(ratingSort, new Comparator<GifModel>() { 

    @Override 
    public int compare(GifModel lhs, GifModel rhs) { 
     if (lhs.getRating() < rhs.getRating()) 
      return -1; 
     else if (lhs.getRating() > rhs.getRating()) 
      return 1; 
     return 0; 
    } 

}); 
+0

당신이 최고입니다. 그게 내가 원하는 걸 원해. 고마워요 :) – Darek

+0

도와 드리겠습니다. 3 개의 가능한 값을 반환해야하는 Comparator를 수행 할 때를 기억하십시오. 원본에는 1 또는 0 만있었습니다. – dharms

+0

예. 이 주석을 가져 주셔서 감사합니다. 나는 그것을 기억할 것이다. – Darek

1

목록 뷰를 정렬하고 싶지는 않지만이를 적용 할 컬렉션입니다. 이렇게하려면 간단한 Comparator()을 수행 할 수 있습니다.

+0

하지만 필자는 비교에 사용될 태그를 정의해야합니다. 그런 식으로 비교할 수 없다 – Darek

1

귀하의 요구 사항에 맞게 GifModel 임플란트를 만드는 것은 불필요합니다. Comparator, 이미 impl 인 경우. Comparable<GifModel>.

당신은 단지 compareTo(GifModel o) 방법을 구현하고 any possible field of GifModel하여 목록을 정렬과 같은 요구 사항이 있다면 당신은 그냥 Collections.sort(ratingSort)

, 당신은 당신이 GifModel 비교기도 대등도를 구현하도록 할 수 있습니다 따라서 gifModelObj.getRating()이 비교할 수 있습니다. 정렬을 위해 Comparators을 만듭니다.

+0

날짜별로 정렬하기 위해 이미 구현 된 메서드가 하나 있는데 다른 솔루션이 필요합니다. – Darek

+0

@Darek 10 개의 다른 방법으로 목록을 정렬하려면 (10 개의 다른 필드로), 10 개의 비교자를 만들고 패스합니다. 그것은 Collections.sort'에 있습니다. 당신은 당신의 수업 impl을시킬 수 있습니다. Comparable, 원하는 경우 "default"와 같이 정렬 할 수 있습니다. – Kent