티스토리 뷰
Collections.sort 에다가 comparator 로 대상 변수만 지정해주면
중복없이 쉽게 정렬이 가능하다. 코딩도 짧아지고 속도도 빨라진다.
downMyData : ArrayList<>형식의 데이터가 들어있다고 가정
myArrayData : sort 용 비어있는 ArrayList<>
//비어있는 sort용 ArrayList ListmyArrayData = new ArrayList (); //일단 데이터를 sort용 ArrayList<>에 넣는다. for(int i = 0 ; i < downMyData.size(); i++) { myArrayData.add(downMyData.get(i)); }//end for //Comparator 를 만든다. private final static Comparator myComparator= new Comparator () { 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); MyAdapter adapter = new MyAdapter (this,R.layout.my_item,myArrayData ); MyListView.setAdapter(adapter);
요러면 끝이다. Comparator 는 compare에 ArrayList의 colum중 정렬시키고자 하는 데이터를 넣으면된다.
여기서 getData() 가 두개인 이유는 내부적으로 데이터를 하나하나 비교해 sort 시키기 때문이다.
sort메소드를 손수 만들어 사용해본 사람이라면 이해가 쉬울것이다.
데이터를 역순정렬하려면 밑에처럼 하면 한방에 해결된다.
Comparator comparator = Collections.reverseOrder();
Collections.sort(myArrayData ,comparator);
[▼추가]
하지만 위의 역순정렬은 추천하지 않는다. 별도의 comparator 가 필요할경우 역순정렬comparator와 중복해서 사용할 수 없기 때문이다.
그래서 밑에 방법을 추천한다.
일단 정순정렬을 실시한 후 뒤집는 방법이다.
Collections.sort(myArrayData, myComparator);
Collections.reverse(myArrayData);
위 처럼 하면 정상적으로 역순정렬이 가능하다.
[▼추가]
*string이 아닌 int 값을 campare 할 때
Comparator는 String 이나 Class등은 받을 수 있지만 int값을 받지 못한다.
int를 string 으로 변환하여 compare 하면.. sort 하는 의미가 없어져 버린다.
1200 보다 130 이 더 높은값으로 인식 하기 때문이다.
이럴때는 int값을 string으로 바꾸어주고 자릿수를 고정으로 맞춰주면
정상적인 sort가 가능하다.
private final static Comparator myComparator= new Comparator() { private final Collator collator = Collator.getInstance(); @Override public int compare(custom object1,custom object2) { //숫자는 문자열로 변환시 길이가 가변이라서 값에따른 sort가 비정상(1200보다 130이 높게 나옴) //문자열의 길이를 맞추어 compare 를 만들면 정상적인 sort가 가능 String price1 = getData1(); String price2 = getData2(); String tmp1 = ""; String tmp2 = ""; if(getData1() < 5){ tmp1 = tmp1 + "0"; } if(getData2() < 5){ tmp2 = tmp2 + "0"; } return collator.compare(tmp1+price1, tmp2+price2); } };
[출처,원본] http://devbible.tistory.com , http://devbible.tistory.com/13
[작성자] devbible.tistory.com
'Development' 카테고리의 다른 글
[Android] 타이틀 없애기 (0) | 2010.07.15 |
---|---|
[Android] string.xml 에서 String 받기 (0) | 2010.07.14 |
[Android] INSTALL_FAILED_INSUFFICIENT_STORAGE (용량부족 오류) (0) | 2010.07.13 |
[Android] code상에서 xml shape 적용시키기 (0) | 2010.07.09 |
[Android] Shape (0) | 2010.07.09 |
- Total
- Today
- Yesterday