2016-04-14 7 views
1

私は車のリスト、特に自動車のリストを持っています。このオブジェクトのそれぞれは異なる属性を持ちます(車とモトは最高速度を持ちますが、二乗はありません)。特定の要素に基づいて並べ替えの配列

Moto BicicleとCarはVehicleのサブクラスであり、VehicleはComparableインタフェースを実装しています。

彼らは共通点があり、作成された年であり、それはその特定の属性を使用して配列を並べ替える方法です。デフォルトでは、javaは、オブジェクトが共通の別の属性、「色」に基づいてソートします。

この

は、コードは配列をソートするために使用されている。

public static <T> void sortArray(Comparable<T>[] a) { 
     Arrays.sort(a); 
} 

私は、リストをソートするために使用したい属性を選択する方法はあります(これは、このいずれかである必要がありますか)? 事前に助けてくれてありがとう。

+0

あなたのテックスカー、モトス、ビシクルはVehicleのサブクラスであり、VehicleはComparableインターフェイスを実装していると思います。この最後の点は、VehicleにcompareToメソッドがあることを意味します。そのメソッドを "color"ではなく "year"を使用するように変更します。 – RubioRic

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator) – ControlAltDel

+0

ポイント3のこのリンクに続いて、以前のコメントで私が何を意味しているかの例を見つけてください。http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/ – RubioRic

答えて

1

デフォルトでは、Arrays.sortは、その要素のComparable natural orderingに従ってソートします。変更する場合は、代わりにArrays.sort(T[] a, Comparator<? super T> c)を使用して、独自のコンパレータを定義することができます。

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(T[]、はjava.util.Comparator)

+0

ああ、それはうまくいった^^ありがとう:D実際にはxDという意味になります。ありがとう。 – Viscceras

1

あなたは自分のコンパレータを実装し、Arrays.sort(array, comparator)にそれを渡すことができます。

Vehicle[] v = ... 
Arrays.sort(v, (v1,v2) -> v1.getYear() - v2.getYear()); 

または

を使用すると、特定の属性で配列をソートし、一般的な関数を書くことができることに基づいて
Arrays.sort(v, Comparator.comparing(Vehicle::getYear)); 

public static <T, U extends Comparable<? super U>> void sortArray(T[] a, 
    Function<? super T, ? extends U> attribute) { 
    Arrays.sort(a, Comparator.comparing(attribute)); 
} 

とラムダまたはメソッドを、これは簡単ですハンドル使い方それと一緒に使用する

sortArray(v, Vehicle::getYear); 
関連する問題