티스토리 뷰
발생일: 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을 쓸 것을 추천한다.
문제:
자바에서 객체를 담고 있는 리스트를 정렬하기 위해 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을 쓸 것을 추천한다.
반응형
댓글
공지사항