Подтвердить что ты не робот

Переменные 2-го потока Java по возрастанию/убыванию

Я хочу сортировать 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()

Каков действительно правильный способ сделать это?

4b9b3361

Ответ 1

В вашем первом примере reversed применяется ко всему компаратору, который сравнивает seq1, затем seq2 в порядке возрастания.

Вам нужно только отменить второе сравнение, которое можно сделать, например, с помощью

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