私たちは、実際の開発作業では、多くの場合、タイトルなど、並べ替えの問題が発生し、どのように我々は、プロパティリストの特定のセットのソートありません
コレクション内の要素型リストは、当社のカスタム型である場合には、の要素のリストをソートするには、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(リスト)することが可能である、データの文字列型をソートします。