私は、文字列でアルファベット順に並べ替えることができますが、String
などの2つ以上の変数を含むデータオブジェクトのような複雑なものはどうでしょうか。それらを並べ替える方法はありますか?アルファベット順に複雑なオブジェクトのソートarraylist
Collections
の方法がない場合は、forループまたは標準ソートアルゴリズムを作成して、各オブジェクトのstrings変数を調べ、配列内のオブジェクトのインデックスを移動することができます。
しかし、私は
私は、文字列でアルファベット順に並べ替えることができますが、String
などの2つ以上の変数を含むデータオブジェクトのような複雑なものはどうでしょうか。それらを並べ替える方法はありますか?アルファベット順に複雑なオブジェクトのソートarraylist
Collections
の方法がない場合は、forループまたは標準ソートアルゴリズムを作成して、各オブジェクトのstrings変数を調べ、配列内のオブジェクトのインデックスを移動することができます。
しかし、私は
使用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)) }
}
}
:
また、Comparableの実装に関しては、同じ方法で型のリストを常に並べ替えることが望ましい場合には、これは意味があります。さまざまな状況で異なる順序を設定したい場合は、ComparatorをCollections.sort()に渡すのがおそらく方法です。 –
これは私が見たComparatorのポイント例の中で最も – CQM
私はコンパレータインタフェースを実装する内部クラスを作成します
List<Car> list = new ArrayList<Car>(myCars); //your Car list
Collections.sort(list, new CarHorsePowerComparator());
グアバライブラリが持っている偉大なアウトオブ複合コンパレーターの作成のための-boxサポート。見てみな。 –
これはまた役立ちますhttp://stackoverflow.com/questions/2839137/how-to-use-comparator-in-java-to-sort – Adrian
JavaDocを読むことはあなたを正しい方向に向けるでしょう。 – Raedwald