Seq1を昇順でソートし、seq2を降順でソートしたいので、次のようにします。
list = list.stream().sorted(comparing(AClass::getSeq1).thenComparing(
AClass::getSeq2).reversed()).collect(toList());
しかし、seq1とseq2の両方が降順でソートされるため、結果が出ます。
これを行うと、seq1を昇順、seq2を降順にすることができます。
sorted(comparing(AClass::getSeq1)
.reversed().thenComparing(AClass::getSeq2).reversed()
これを実際に行う正しい方法は何ですか?
最初の例では、reversed
がseq1とseq2を昇順に比較するコンパレータ全体に適用されます。
必要なのは、2番目の比較のみを元に戻すことです。これは、たとえば次のように実行できます。
import static Java.util.Collections.reverseOrder;
import static Java.util.Comparator.comparing;
list = list.stream().sorted(
comparing(AClass::getSeq1)
.thenComparing(reverseOrder(comparing(AClass::getSeq2))))
.collect(toList());
//or you could also write:
list = list.stream().sorted(
comparing(AClass::getSeq1)
.thenComparing(comparing(AClass::getSeq2).reversed()))
.collect(toList());