2012-11-14 10 views
8

私は、文字列でアルファベット順に並べ替えることができますが、Stringなどの2つ以上の変数を含むデータオブジェクトのような複雑なものはどうでしょうか。それらを並べ替える方法はありますか?アルファベット順に複雑なオブジェクトのソートarraylist

Collectionsの方法がない場合は、forループまたは標準ソートアルゴリズムを作成して、各オブジェクトのstrings変数を調べ、配列内のオブジェクトのインデックスを移動することができます。

しかし、私は

+0

グアバライブラリが持っている偉大なアウトオブ複合コンパレーターの作成のための-boxサポート。見てみな。 –

+0

これはまた役立ちますhttp://stackoverflow.com/questions/2839137/how-to-use-comparator-in-java-to-sort – Adrian

+0

JavaDocを読むことはあなたを正しい方向に向けるでしょう。 – Raedwald

答えて

26

使用the function taking as second parameter a ComparatorCollections方法について何かを見落としている場合、私は主に思っていました。

Ilを使用すると、Comparatorのインスタンスを渡して、必要に応じてソートすることができます。 javadoc of Comparatorにはコンパレータの構築に関するガイドラインが含まれています。

コンパイラをローカルでのみ使用する場合は、匿名クラスとして定義することができます。ここで私はStringでそれぞれの分野のいずれかに係るオブジェクトを並べ替える例を示します

また
Collections.sort(groupResults, new Comparator<ProductSearchResult>() { 
    public int compare(ProductSearchResult result1, ProductSearchResult result2) { 
     return result1.product.getRsId().compareTo(result2.product.getRsId()); 
    } 
}); 

、また、あなたのクラスはComparableインターフェイスを実装するかもしれないが、あなたは自然な(明白なことを定義することができる場合にのみ、これは理にかなっています)注文。あなたは馬力によって、あなたの車のリストをソートしたいときに今

public class Car { 
public double horsePower; 

class CarHorsePowerComparator implements Comparator<Car> { 
    @Override 
    public int compare(Car car1, Car car2) { 
     return Integer.valueOf(car.horsePower).compareTo(Integer.valueOf(car2.horsePower))   } 
    } 
} 

+1

また、Comparableの実装に関しては、同じ方法で型のリストを常に並べ替えることが望ましい場合には、これは意味があります。さまざまな状況で異なる順序を設定したい場合は、ComparatorをCollections.sort()に渡すのがおそらく方法です。 –

+2

これは私が見たComparatorのポイント例の中で最も – CQM

12

私はコンパレータインタフェースを実装する内部クラスを作成します

List<Car> list = new ArrayList<Car>(myCars); //your Car list 
Collections.sort(list, new CarHorsePowerComparator()); 
関連する問題