Java 8 lambda sortowanie

Java 8 lambda sortowanie
ZA
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 8 lat
0

Witam,

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

Kopiuj
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?

D3X
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:187
0
airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
3

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

Kopiuj
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());
edytowany 1x, ostatnio: airborn
ZA
intelliJ mówi "Cannot resolve method reverse()"
airborn
Naprawdę, tak ciężko sprawdzić literówkę? reversed zamiast reverse
ZA
Dziękuję za pomoc, to rozwiązało problem :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.