티스토리 뷰

발생일: 2008.09.03

문제:
자바에서 객체를 담고 있는 리스트를 정렬하기 위해 Collections.sort() 를 사용하려고 한다.
객체의 정렬 순서를 어떻게 정해야 할까?

해결책:
Comparator 를 구현해서 compare 메서드를 오버라이드 해준다.

예:
package com.ohgyun.sortTest;

import java.beans.Expression;
import java.util.Comparator;

public class BeanOrder implements Comparator  {
    private String target;    //정렬 대상
    private boolean flag;    //오름차순 내림차순
    /**
     * 생성자
     * @param target 정렬할 대상
     * @param flag    true 오름차순, false 내림차순
     */
    public BeanOrder(String target, boolean flag) {
        //target이 name이라면 getName으로 만들어줌
        this.target = "get" + target.substring(0, 1).toUpperCase() + target.substring(1);
        this.flag = flag;
    }
    
    /**
     * 객체 결과 비교하기
     */
    public int compare(Object o1, Object o2) {
        Bean b1 = (Bean) o1;
        Bean b2 = (Bean) o2;
        
        String s1 = null;
        String s2 = null;
        
        try {
            /*
             * expression으로 동적 메서드 생성 하여 그 값으로 비교한다
             */
            s1 = (String) new Expression(b1, target, null).getValue();
            s2 = (String) new Expression(b2, target, null).getValue();
        } catch (Exception e) {
            s1 = "";
            s2 = "";
        }
        
        if (flag) {
            return s1.compareTo(s2);
        } else {
            return s2.compareTo(s1);
        }
    }    
}

* Java 5.0 이상일 경우, Generic을 쓸 것을 추천한다.



반응형
댓글
공지사항