Java 8 Compratorソースのデモと解析


前のJava ComprableとCompratorの比較詳細では、Javaにおける並べ替え方法を比較し、具体的に分析し、主にCompratorインターフェースとComprableインターフェースに対して、どのような方法であれ、このインターフェースを実現し、中の方法を書き換える必要がある。
Java 8では、Compratorクラスを直接呼び出して、いくつかのカスタムの並べ替え機能を実現することができます。たとえば、あるフィールドの昇順に従って、そしてあるフィールドの降順に並べます。また、nullが発生したらどうしますか?一般的な基礎データタイプのリストとオブジェクトのセットを並べ替えるためのデモです。

/**
 *    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);

  }
}
Compratorのソースコード解析
最近の勉强はソースの重要性を意识しましたので、Compratorの使い方を分析してから、ソースの研究を続けています。
1)まずcompreToのソースコードを見てください。

2)thenCompraringの方法を見ると、実はcompreの方法であり、私達があるインターフェースを実現して内部を書き換える方法と似ています。Compratorが下の階で実現してくれただけです。

3)最後に面白いnullsFirst方法とnullsLast方法を見てみます。二つの方法は主にnull Firstのフラグビットと違って、その下の階は依然としてcompre方法を実現しています。nullに対する判断を加えただけで、もう一つはnull Firstのフラグビットによる判断です。Get


以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。