progNewbie:
私はソートするオブジェクトのリストを持っています。しかし、私は、3つの異なる条件を持っています。私はこのコードを持っている理由です。
Collections.sort(myList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
// my code
}
});
三回。最初の条件を持つすべての要素を並べ替えx
、リストの一番下に。第2の時間は、条件にすべての要素をソートy
下へと再び条件についてz
。
今、私は、私は1つの比較法では、複数の条件を組み合わせてできるか疑問に思います。だから私は、この3回行う必要はありません。
編集:条件の詳細明確にします。私は、基準持つすべてのオブジェクトソートするx
リストの一番下にします。要素が基準を満たす場合はy
それも下にあるべきx
と同じでは用のアナログを適用しますz
。
サミュエル・フィリップ:
あなたは、Javaストリームを使用することができます。使用する際にも使用されますCollection.sort()
:
myList.sort(Comparator.comparing(MyObject::getAttributeX)
.thenComparing(i -> i.getSomething().getSubValue())
.thenComparing((a, b) -> a.getInt() - b.getInt()));
あなたは、Java 8よりも低いバージョンを使用している場合は、でソートロジックを自分で実装する必要がありComparator
、または外部ライブラリを使用します。
Collections.sort(myList, new Comparator<MyObject>() {
@Override
public int compare(MyObject a, MyObject b) {
int cmp0 = a.getAttributeX().compareTo(b.getAttributeX());
if (cmp0 != 0) {
return cmp0;
}
int cmp1 = a.getSomething().getSubValue().compareTo(b.getSomething().getSubValue());
if (cmp1 != 0) {
return cmp1;
}
return a.getInt() - b.getInt();
}
});