複数の条件のためのCollections.sort

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();
    }
});

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221912&siteId=1