핸드 비교기comparator
4628 단어 comparator
public class XXXComparator<E> {
private final Logger log = Logger.getLogger(XXXComparator.class);
@SuppressWarnings({ "unchecked", "rawtypes" })
public void sort(List<E> list, final String method, final String sortType) {
// list list
// method get
// sortType desc or asc
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sortType != null && "desc".equals(sortType)) {
ret = m2.invoke(((E) b), null).toString()
.compareTo(m1.invoke(((E) a), null).toString());
} else {
ret = m1.invoke(((E) a), null).toString()
.compareTo(m2.invoke(((E) b), null).toString());
}
} catch (NoSuchMethodException e) {
log.error(e);
} catch (InvocationTargetException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return ret;
}
});
}
}
예를 들어 나는 People 대상이 하나 있는데 그 안에name,age 등의 속성이 있다.
현재 나는 People의list 목록을 가지고 있는데, 예를 들어name이나age로 정렬해야 한다
자, 이렇게 써도 돼요.
XXXComparator<People> sortList = new XXXComparator<People>();
String method = "getName"; //or 'getAge'
String orderByType = "desc";
sortList.sort(peopleList, method, orderByType);
이렇게 하면 속성별로 정렬할 수 있어요.
위의comparator에 최적화를 진행하였으며, int 형식의 데이터 응용 방법에 문제가 있을 수 있습니다
public class XXXComparator<E> {
private final Logger log = Logger.getLogger(XXXComparator.class);
@SuppressWarnings({ "unchecked", "rawtypes" })
public void sort(List<E> list, final String methodName, final String sortType) {
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method method = a.getClass().getMethod(methodName);
Object aResult = method.invoke(a);
Object bResult = method.invoke(b);
if (aResult == null) {
return -1;
}
if (bResult == null) {
return 1;
}
if (aResult instanceof String) {
String com1 = "desc".equals(sortType) ? (String) aResult : (String) bResult;
String com2 = "desc".equals(sortType) ? (String) bResult : (String) aResult;
log.info("aResult= " + aResult + "
bResult= " + bResult);
return com1.toLowerCase().compareTo(com2.toLowerCase());
}
if (aResult instanceof Comparable) {
Comparable com1 = "desc".equals(sortType) ? (Comparable) aResult
: (Comparable) bResult;
Comparable com2 = "desc".equals(sortType) ? (Comparable) bResult
: (Comparable) aResult;
return com1.compareTo(com2);
}
} catch (NoSuchMethodException e) {
log.error(e);
} catch (InvocationTargetException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return ret;
}
});
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
컬렉션 프레임워크와 셋(Set)HashSet<E> TreeSet<E> 중복 불가 순서 유지 불가 equals Object 클래스의 equals 메소드 호출 결과를 근거로 동일 인스턴스를 판단 hashCode set의 해쉬 코드를 반환 Set에서의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.