コレクション内のListオブジェクトのプロパティでソートする方法

私たちは、実際の開発作業では、多くの場合、タイトルなど、並べ替えの問題が発生し、どのように我々は、プロパティリストの特定のセットのソートありません

コレクション内の要素型リストは、当社のカスタム型である場合には、の要素のリストをソートするには、2つの方法があります。

この方法の一つ

  匹敵する<T>インターフェイスを実装し、当社のカスタムクラスで、コレクション内の要素の型のリストをみましょう、とクラスの公共のintのcompareTo(T o)の方法を記述します。次のように:

1  パブリック クラス試験 
 2  {
 3      パブリック 静的 ボイドメイン(文字列[]引数) 
 4      {
 5          のArrayList <エンティティ>リスト= 新規のArrayList <エンティティ> ();
6          list.add(新しいエンティティ( "李四"、24 ));
7          list.add(新しいエンティティ( "张三"、13 ))。
8          list.add(新しいエンティティ( "王五"、25 ));
9          のSystem.out.println( "排序前:" +のリスト)。
10          Collections.sort(リスト)。
11         System.out.println( "排序后:" +のリスト)。
12      }
 13  }
 14  クラスエンティティ実装同等<エンティティ>
 15  {
 16      文字列名を、
17      int型の年齢;
18      公共のエンティティ(文字列名、int型の年齢){
 19          スーパー();
20          この .nameの= 名前;
21          この .age = 年齢;
22      }
 23      パブリック文字列のgetName(){
 24          リターン名。
25      }
26      公共の ボイドのsetName(文字列名){
 27          この .nameの= 名前。
28      }
 29      公共 int型getAge(){
 30          リターン年齢。
31      }
 32      公共 ボイド setAge(int型の年齢){
 33          この .age = 年齢。
34      }
 35      @Override
 36      パブリック文字列のtoString(){
 37          リターン "エンティティ[NAME =" +名+ "年齢=" +年齢+ "]" 38      }
 39     @Override
 40      公共 のint のcompareTo(エンティティO) 
 41      {
 42          であればこの .getAge()> o.getAge())
 43          {
 44              リターン 1 45          }
 46          そう であればこの .getAge()< o.getAge())
 47          {
 48              リターン -1 49          }
 50          他の
51          {
 52              リターン 0 53          }
 54     }
 55 }

  私たちは、昇順に年齢プロパティの値に応じて、エンティティのこのタイプをしたい、最初の方法は、Comparable <エンティティ>インタフェースを実装するエンティティクラスを聞かせて、そして公共のintのcompareTo(エンティティ0)メソッドを記述することです。したがってCollections.sort(リスト)を使用して、年齢は、オブジェクトリストのサイズに選別することができます。

出力:

[エンティティの[名=ジョン・ドウ、年齢= 24]、エンティティ[名= ジョー・スミス、年齢= 13]、エンティティ[名= 王ウー、年齢= 25:ソート前]] 
:[エンティティの[名ソート =ジョー・スミス、年齢= 13]、エンティティ[名前= ジョン・ドウ、年齢= 24]、エンティティ[名前= 王ウー、年齢= 25]

方法二

  方法2は、コンパレータを渡す()メソッドをソートするために時間の一種です。具体的には、比較的匿名内部クラスのインタフェースを実現するために渡され、目的は、コンパレータに従ってオブジェクトのリストをソートするソート()メソッドを伝えることです。次のように:

1  パブリック クラス試験 
 2  {
 3      パブリック 静的 ボイドメイン(文字列[]引数) 
 4      {
 5          のArrayList <エンティティ>リスト= 新規のArrayList <エンティティ> ();
6          list.add(新しいエンティティ( "李四"、24 ));
7          list.add(新しいエンティティ( "张三"、13 ))。
8          list.add(新しいエンティティ( "王五"、25 ));
9          のSystem.out.println( "排序前:" +のリスト)。
10          Collections.sort(リスト、新しいですコンパレータ<エンティティ> (){
 11          @Override
 12          公共 のint (エンティティO1、エンティティO2)を比較 
 13          {
 14              であれば(o1.getAge()> o2.getAge())
 15              {
 16                  リターン 1 17              }
 18              そう であれば(o1.getAge()< o2.getAge())
 19              {
 20                  リターン -1 21              }
 22              他の
23              {
 24                  リターン 0 25             }
 26          }
 27      });
28          のSystem.out.println( "排序后:" +のリスト)。
29      }
 30  }
 31  クラスエンティティ
 32  {
 33      文字列名;
34      int型の年齢;
35      公共のエンティティ(文字列名、int型の年齢){
 36          スーパー();
37          この .nameの= 名前。
38          この .age = 年齢;
39      }
 40      パブリック文字列のgetName(){
 41          リターン名前;
42      }
 43      公共 ボイドのsetName(文字列名){
 44          この .nameの= 名前。
45      }
 46      公共 int型getAge(){
 47          リターン年齢。
48      }
 49      公共 ボイド setAge(int型の年齢){
 50          この .age = 年齢。
51      }
 52      @Override
 53      パブリック文字列のtoString(){
 54          リターン "エンティティ[NAME =" +名+ "年齢=" +年齢+ "]" 55     }
 56 }

  場合着信コンパレータは、ソート()メソッドは、比較器からのオブジェクトのリストをソートするために使用されるソート()メソッド。

出力:

[エンティティの[名=ジョン・ドウ、年齢= 24]、エンティティ[名= ジョー・スミス、年齢= 13]、エンティティ[名= 王ウー、年齢= 25:ソート前]] 
:[エンティティの[名ソート =ジョー・スミス、年齢= 13]、エンティティ[名前= ジョン・ドウ、年齢= 24]、エンティティ[名前= 王ウー、年齢= 25]

  ソート()メソッドは、なぜデータがそれを入力する文字列を並べ替えることができますか?

  答えは、StringクラスがComparableを<文字列>インタフェースを実装する、です。これは、直接Collections.sort(リスト)することが可能である、データの文字列型をソートします。

 

おすすめ

転載: www.cnblogs.com/baichunyu/p/11627171.html