Java 8 lambda sortowanie

0

Witam,

sortuję sobie tablicę obiektów po dwóch zmiennych i próbuje to zrobić za pomocą wyrażeń lambda, oto kod:

Comparator<PhoneInfo> phoneInfoComparator = Comparator.comparing(phoneInfo -> phoneInfo.getTime());
        phoneInfoComparator = phoneInfoComparator
                        .thenComparing(Comparator.comparing(phoneInfo -> phoneInfo.getPhoneNrValue()));
Stream<PhoneInfo> personStream = telMap.values().stream().sorted(phoneInfoComparator);
List<PhoneInfo> sortedASCPhoneInfos = personStream.collect(Collectors.toList());

getTime() i getPhoneNrValue() zwracają Integer. W pierwszym przypadku jest ok bo sortowanie ma być rosnące ale drugie powinno być malejące (to w thenComparing ).
Wiem jak to zrobić po staremu, bez wyrażeń lambda ale myślałem, że może da się to z nimi zrobić mniejszą ilością kodu.
Pytanie: jak to napisać, tak żeby Comparator.comparing() używał odwrotnej kolejności? Albo pozwalał na napisanie własnej logiki porównania?

3

Comparator me metodę reverse wystarczy więc z niej skorzystać budując swój komparator. Coś takiego powinno zadziałać:

Comparator<PhoneInfo> phoneInfoComparator = Comparator
    .comparing(PhoneInfo::getTime)
    .thenComparing(
        Comparator
        .comparing(PhoneInfo::getPhoneNrValue)
        .reverse());
Stream<PhoneInfo> personStream = telMap.values().stream().sorted(phoneInfoComparator);
List<PhoneInfo> sortedASCPhoneInfos = personStream.collect(Collectors.toList());

1 użytkowników online, w tym zalogowanych: 0, gości: 1