Пользовательская реализация компаратора для ASC и DESC заказа - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь найти способ определения уникальной реализации java.util.Comparator, пригодной для целей как в порядке возрастания, так и в порядке убывания.

Я определил класс Golf.java, который представляет автомобиль Volkswagen.Я также определил Comparator, который упорядочивает Golf экземпляров по лошадиной силе (переменная int).Мне было интересно, можно ли использовать один и тот же компаратор как для возрастания, так и для убывания.

GolfHorsePowerComparator.java

package test2.comparator;

import test2.dto.Golf;
import java.util.Comparator;

public class GolfHorsePowerComparator implements Comparator<Golf> {

    @Override
    public int compare(Golf a, Golf b) {
        return a.getHorsePower() > b.getHorsePower() ? 1 : a.getHorsePower() == b.getHorsePower() ? 0 : -1;
    }

}

Учитывая список Golf, как я могу отсортировать их по возрастанию илипо убыванию с использованием той же java.util.Comparator реализации?

Ответы [ 2 ]

7 голосов
/ 07 апреля 2019

Вы можете использовать Collections::reverseOrder для сортировки в порядке убывания. Например:

GolfHorsePowerComparator golfHorsePowerComparator = new GolfHorsePowerComparator();
Collections.sort(golfList, Collections.reverseOrder(golfHorsePowerComparator));
3 голосов
/ 07 апреля 2019

Да, посмотрите документацию . Comparator имеет метод reversed. Вы можете просто сделать это:

list.stream().sorted(comparator).collect(Collectors.toList());
list.stream().sorted(comparator.reversed()).collect(Collectors.toList());

Первый сортируется по возрастанию, второй - по убыванию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...