2011년 2월 23일 수요일
[안드로이드] arraylist 정렬하기
Collections.sort 에다가 comparator 로 대상 변수만 지정해주면
중복없이 쉽게 정렬이 가능하다. 코딩도 짧아지고 속도도 빨라진다.
downMyData : ArrayList<>형식의 데이터가 들어있다고 가정
myArrayData : sort 용 비어있는 ArrayList<>
@ custom 은 Custom Class 를 뜻한다. 바꿀 수도 있음.
//비어있는 sort용 ArrayList | ||
List<custom> myArrayData = new ArrayList<custom>(); |
| ||
//일단 데이터를 sort용 ArrayList<>에 넣는다. |
for(int i = 0 ; i < downMyData.size(); i++) { | ||
myArrayData.add(downMyData.get(i)); |
}//end for | ||
|
//Comparator 를 만든다. | ||
private final static Comparator<custom> myComparator= new Comparator<custom>() { |
private final Collator collator = Collator.getInstance(); | ||
@Override |
public int compare(custom object1,custom object2) { | ||
return collator.compare(object1.getData(), object2.getData()); |
} | |
}; |
| |
|
// Collections.sort 로 comparator 를 주어서 데이터를 정렬 시킨다. | ||
Collections.sort(myArrayData ,myComparator); |
| |
|
//정렬된 ArrayList를 Adapter에 넣고 리스트뷰에 배치한다. | ||
ListView MyListView = (ListView)findViewById(R.id.mylistview); |
27 |
MyAdapter adapter = new MyAdapter (this,R.layout.my_item,myArrayData ); | |
28 |
MyListView.setAdapter(adapter); |
29 |
</custom></custom></custom></custom> |
Comparator 에 있는 compare 함수에 ArrayList의 colum중 정렬시키고자 하는 데이터를 가져와서 비교하면 된다. 여기서 parameter가 두개인 이유는 해당 arraylist 내부의 두개의 값들을 비교하기 때문이다.
데이터 역순정렬 시 사용
Comparator comparator = Collections.reverseOrder();
Collections.sort(myArrayData ,comparator);
하지만 위의 역순정렬은 추천하지 않는다. 별도의 comparator 가 필요할경우 역순정렬comparator와 중복해서 사용할 수 없기 때문이다.
그래서 밑에 방법을 추천한다.
일단 정순정렬을 실시한 후 뒤집는 방법이다.
Collections.sort(myArrayData, myComparator);
Collections.reverse(myArrayData);
위 처럼 하면 정상적으로 역순정렬이 가능하다.
[출처,원본] http://devbible.tistory.com , http://devbible.tistory.com/13, http://devbible.tistory.com/tag/ArrayList%20%EC%A0%95%EB%A0%AC
[작성자] www.ybinside.com
Collections.sort(myArrayData ,comparator);
하지만 위의 역순정렬은 추천하지 않는다. 별도의 comparator 가 필요할경우 역순정렬comparator와 중복해서 사용할 수 없기 때문이다.
그래서 밑에 방법을 추천한다.
일단 정순정렬을 실시한 후 뒤집는 방법이다.
Collections.sort(myArrayData, myComparator);
Collections.reverse(myArrayData);
위 처럼 하면 정상적으로 역순정렬이 가능하다.
[출처,원본] http://devbible.tistory.com , http://devbible.tistory.com/13, http://devbible.tistory.com/tag/ArrayList%20%EC%A0%95%EB%A0%AC
[작성자] www.ybinside.com
// 다른 사이트의 예시
Class Test {
public String name;
public String sirName;
}
ArrayList<Test> res = new ArrayList<Test>();
res.add(…);
res.add(…);
Comparator<Test> comperator = new Comparator<Test>() {
@Override
public int compare(Test object1, Test object2) {
return object1.name.compareToIgnoreCase(object2.name);
}
public int compare(Test object1, Test object2) {
return object1.name.compareToIgnoreCase(object2.name);
}
};
Collections.sort(res, comperator);
Collections.sort(res, comperator);
혹은 compareToIgnoreCase 대신 compareTo
그리고 int 나 long을 비교할 경우에는
Return (Object1.getInt() > Object2.getInt() ? 1: -1);
이처럼 하면 된다.
'Android > Tip&Tech' 카테고리의 다른 글
DB별 Auto_increatement 정리 (0) | 2012.05.04 |
---|---|
[펌]Android Strict Mode 활용 가이드 (0) | 2012.05.04 |
Android/Intent 사용 예 (2) | 2012.03.20 |
[펌]svn 구축 (0) | 2012.02.23 |
[펌]ViewPager 에 관한 설명 (0) | 2012.02.17 |