자바 8 Comparator 소스 데모 및 분석

앞의 편자바 Comparable 과 Comparator 비교 상세 설명에서 자바 의 정렬 방법 을 비교 하고 구체 적 으로 분석 한 것 은 주로 Comparator 인터페이스 와 Comparable 인 터 페 이 스 를 대상 으로 하 는 것 이다.어떤 방식 이 든 이 인 터 페 이 스 를 실현 하고 안의 방법 을 다시 써 야 한다.
자바 8 에서 이 를 최적화 시 켰 고 Comparator 류 를 직접 호출 하면 사용자 정의 정렬 기능 을 실현 할 수 있다.예 를 들 어 특정한 필드 에 따라 순 서 를 올 리 고 특정한 필드 의 내림차 순 으로 배열 할 수 있다.그리고 null 상황 이 생기 면 어떻게 처리 할 지 등등.다음은 흔히 볼 수 있 는 기본 데이터 형식의 list 와 대상 의 집합 을 정렬 하 는 프 리 젠 테 이 션 입 니 다.

/**
 *    java8    Comparator     
 */
public class CompareController2 {

  public static void main(String[] args) {

    /**
     *     list        
     */
    List<Integer> list = Arrays.asList(10,133,34,546,53,345);
    //     ,  
    list.sort(Comparator.naturalOrder());
    System.out.println(list);
    //   
    list.sort(Comparator.reverseOrder());
    System.out.println(list);

    /**
     *         
     */
    List<Students> studentsList = new ArrayList<>();
    studentsList.add(new Students("zhangSan", 28, "beiJing"));
    studentsList.add(new Students("liSi", 25, "shangHai"));
    studentsList.add(new Students("wangWu", 22));

    studentsList.sort(Comparator.comparing(Students::getName));
    System.out.println("      :" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAge).reversed());
    System.out.println("      :" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsLast(String::compareTo)).reversed());
    System.out.println("      ,   ,     :" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsFirst(String::compareTo)).reversed());
    System.out.println("      ,   ,     :" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsLast(String::compareTo)).reversed().thenComparing(Students::getAge));
    System.out.println("      ,   ,     ,         :" + studentsList);

  }
}
Comparator 의 소스 코드 분석
최근 에 공 부 를 하면 서 저 는 소스 코드 를 보 는 중요성 을 깨 달 았 습 니 다.그래서 Comparator 가 어떻게 사용 하 는 지 분석 한 후에 소스 코드 를 계속 연 구 했 습 니 다.
1)우선 comparing 의 소스 코드 를 살 펴 보면 사실은 compare To 방법 이다.

2)다음 에 then Comparing 방법 을 보 세 요.사실은 compare 방법 입 니 다.우리 가 특정한 인 터 페 이 스 를 실현 하고 다시 쓰 는 방법 과 비슷 합 니 다.다만 Comparator 가 밑바닥 에서 우 리 를 도와 이 루어 졌 을 뿐 입 니 다.

3)마지막 으로 재 미 있 는 nullsFirst 방법 과 nullsLast 방법 을 살 펴 보 자.두 가지 방법 은 주로 nullsFirst 의 표지 위치 가 다 르 고 그 밑 층 은 copare 방법 을 실현 하 는 것 이다.단지 null 에 대한 판단 을 추 가 했 을 뿐 이 고 또 하 나 는 nullsFirst 의 표지 위치 에 대한 판단 이다.Get !!!


이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기