JAVABean 정렬
public interface java.lang.Comparable {
public int compareTo(Object o);
}
Comparable 인 터 페 이 스 는 하나의 방법 만 있 기 때문에 매우 간단 하 다.하지만 여러 속성 에 따라 대상 을 정렬 해 야 한다 면,
그러면 compare To 를 실현 하 는 방법 은 매우 복잡 해 질 것 이다.
다음은 자카르타 Commons cookbook 에서 따 온 예 입 니 다.
package com.discursive.jccook.collections.compare;
import java.util.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.collections.comparators.ReverseComparator;
public class BookComparator implements Comparator {
public int compare(Object o1, Object o2) {
int comparison = -1;
if( o1 instanceof Book && o2 instanceof Book ) {
Book b1 = (Book) o1;
Book b2 = (Book) o2;
String b1Name = b1.getName( );
String b2Name = b2.getName( );
String b1Author = b1.getAuthor( );
String b2Author = b2.getAuthor( );
if( StringUtils.isNotEmpty( b1Name ) &&
StringUtils.isNotEmpty( b2Name ) ) {
comparison = b1Name.compareTo( b2Name );
}
if( comparison == 0 &&
StringUtils.isNotEmpty( b1Author ) &&
StringUtils.isNotEmpty( b2Author ) ) {
comparison = b1Author.compareTo( b2Author );
}
}
return comparison;
}
}
이 사례 는 북 이 라 고 불 리 는 bean 을 정렬 하 는 것 으로 name 과 author 에 따라
두 속성 을 정렬 합 니 다.우리 가 사용 할 때 다음 과 같은 형식 과 유사 할 수 있다.
Arrary.sort(books,BookComparator)또는 collections.sort
(books,BookComparator).그 중 두 개의 인 자 는 정렬 할 배열 이나 list 입 니 다.
쓰 는 Comparator.다음은 컴 파 터 를 어떻게 만 드 느 냐 하 는 것 이다.
본 고 는 comons 의 구성 요 소 를 어떻게 사용 하여 Comparator 의 구 조 를 완성 하 는 지 보 여 주 는 것 이다.
단일 bean 의 단일 속성 정렬
지금 우리 가 bean 의 한 속성 만 정렬 하고 싶다 면.그러면 구조 만.
Bean Comparator 의 인 스 턴 스 를 내 면 됩 니 다.
형식 은 다음 과 같다.
private BeanComparator comparator = new BeanComparator("name");
이렇게 해서 우 리 는'name'속성 에 따라 집합 중의 bean 을 배열 했다.
순차 적 비교 기.집합 중인 bean 이 name 이라는 속성 이 있 을 때 정렬 할 때
이 정렬 기 는 집합 중의 bean 의 순 서 를 조정 합 니 다.
BeanComparator 는 BeanUtils API 의 한 종류 로 쉽게 뿌리 를 내 릴 수 있 습 니 다.
bean 의 속성 에 따라 Bean 류 를 정렬 합 니 다.
설명 이 필요 한 것 은 이 비교 기 는 javabean 규범 에 부합 되 는 클래스 만 비교 할 뿐,만약 클래스 가
이 속성 이나 속성 이 없습니다.get 과 set 방법 이 없 으 면 비교 할 때 던 집 니 다.
ClassCastException 。
장식 비교 기
위 에서 생 성 된 비교 기 는 기본 적 인 정렬 규칙 을 가지 고 있 습 니 다.예 를 들 어 자연 순서에 따라 배열 합 니 다.
문자열 의 값 이""일 때 앞쪽 에 배열 합 니 다.다음 에 나 는 어떻게 이런 묵인 을 바 꾸 는 지 설명 할 것 이다.
규칙
이 임 무 를 완성 하기 위해 서 는 comons.collections.comparators 를 사용 해 야 합 니 다.
제 공 된 몇 가지 장식 류,ReverseComparator,NullComparator,
Fixed Order Comparator 나 Comparator Utils 라 는 실 용적 인 클래스 입 니 다.
다음은 역순 배열 을 설명 하고 빈 값 배열 과 사용자 정의 순서 배열 을 허용 하 는 실현 방법 을 설명 한다.
우리 가 비교 기 를 역순 으로 배열 하고 싶 을 때 다음 과 같은 형 을 사용 할 수 있다.
형식:
comparator = new ReverseComparator(comparator);
설명 이 필요 한 것 은 이 기능 의 실현 은 정렬 이 끝 난 후에 정렬 할 array 또는
list 에서 reverse()방법 을 호출 하면 됩 니 다.그러나 이런 방법 은 아래 에서 말 한 것 에 적합 하지 않다.
bean 의 다 중 필드 를 정렬 할 때 한 필드 에 만 역순 으로 정렬 합 니 다.
비교 기 를 특정한 순서 로 배열 할 때 Fixed Order Comparator 를 사용 해 야 합 니 다.
이 종 류 는 한 그룹의 대상 을 이러한 사용자 정의 순서에 따라 정렬 하 는 특수 한 순 서 를 정의 하 는 데 사용 된다.
구체 적 인 사례 는 다음 과 같다.
String[] severityOrder = { "Critical", "Minor", "Enhancement" };
Comparator severityComparator = new FixedOrderComparator (severityOrder);
Comparator comparator=new BeanComparator("title",severityComparator) ;
위의 프로그램 과 같이 bean 의 title 속성 을 배열 에 따라 지정 할 수 있 습 니 다.
의 순서 로 정렬!
마지막 으로 설명 할 것 은 위 에서 언급 한 몇 가지 장식 이 Comparator Utils 라 는 실 용적 인 유형 에서 도 지원 되 었 다 는 것 이다.
구체 적 인 사용 은 다음 과 같다.
bean 의 속성 이 null 일 때 정렬 합 니 다.속성 이 null 일 때 앞 에 있 는 지 뒤에 있 는 지 선택 할 수 있 습 니 다!
ComparatorUtils.nullLowComparator(comparator); 또는 Comparator Utils.nullHighComparator(comparator);
정렬 기 를 거꾸로 돌 릴 때:
ComparatorUtils.reversedComparator(mycmp); // 역순
여러 속성의 정렬
bean 의 여러 속성 을 정렬 하려 면 comons.collection.Comparator Chain 을 사용 해 야 합 니 다.이 클래스 는 Comparator 체인 을 정의 합 니 다.체인 의 Comparator 대상 은 순서대로 실 행 됩 니 다.이러한 종류의 addComparator()방법 을 통 해 하나의 comparator 대상 을 comparator 체인 에 추가 할 수 있 습 니 다.사용 할 때 하나의 comparator 를 사용 하 는 것 과 같 습 니 다.comparator Chain 도 comparator 의 핑 계 를 물 려 받 았 기 때문이다.하나의 comparator 를 추가 할 때 위 에서 언급 한 comparator 를 이용 하여 장식 할 수 있 습 니 다.
ComparatorChain comparatorChain = new ComparatorChain( );
comparatorChain.addComparator( new BeanComparator( "name" ) );
comparatorChain.addComparator( new BeanComparator( "author" ) );
comparaterChain.addComparator( new ReverseComparator (new BeanComparator("author") );
구체 적 으로 사용 할 때 는 다음 과 같다.
Arrays.sort( books, comparatorChain );
이렇게 하면 이 comparator 를 sort()방법 에 전달 할 수 있 습 니 다.bean 의 다 중 필드 정렬 에 대해 이야기 하고 한 필드 에 만 역순 하 는 경우 다음 과 같은 실현 을 참고 할 수 있 습 니 다.
ComparatorChain comparatorChain = new ComparatorChain( );
comparatorChain.addComparator( new BeanComparator( "name" ) );
이렇게 하면 bean 에 대한 name 을 정렬 하고 author 속성 을 역순 으로 배열 할 수 있 습 니 다.
그룹 bean 정렬
하나의 bean 의 특정한 속성 이 다른 자바 bean 일 때,우 리 는 그 조합 되 어 들 어 온 bean 의 특정한 속성 에 따라 정렬 하고 싶 을 때,우 리 는 Bean Comparator 의 인 자 를 bean.property 형식 으로 간단하게 설정 해 야 한다.예 를 들 어 북 에 있 는 author 의 title 속성 에 따라 정렬 하려 면 다음 과 같은 형식 을 참고 할 수 있 습 니 다.
new BeanComparator
("author.title",severityComparator))
Comparable 인터페이스의 실현
마지막 으로 author 류 에 대해 Comparable 인 터 페 이 스 를 실현 하려 면 다음 과 같은 실현 을 참고 할 수 있 습 니 다.
public class Book implements Comparable {
public int compareTo(Object arg0) {
// comparators setup
String[] severityOrder = { "Critical", "Major", "Minor", "Enhancement" };
//특수 한 순 서 를 정의 하고 한 그룹의 대상 을 이러한 사용자 정의 순서에 따라 정렬 합 니 다.
Comparator severityComparator = new FixedOrderComparator(severityOrder);
ComparatorChain compChain = new ComparatorChain();
// 기본 자연 순 서 를 사용 하지 않 고 속성 에 존재 하 는 Comparator 를 지정 합 니 다.
compChain.addComparator(new BeanComparator("author.
title", severityComparator));
compChain.addComparator(new NullComparator
(new BeanComparator("name"), true));
compChain .addComparator(new ReverseComparator
(new BeanComparator("id")));
return compChain.compare(this, arg0);
}
}
또 다른 실현 방향 은 comons.lang.copareBulder 를 이용 하여 이 루어 지 는 것 이다.하지만 이상 의 장식 기능 을 잃 었 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.