ASC 和 DESC 订单的自定义比较器实现

Custom Comparator implementation for both ASC and DESC order

我正在尝试找到一种方法来定义可用于升序和降序目的的 java.util.Comparator 的独特实现。

我定义了一个class Golf.java代表大众汽车。我还定义了一个比较器,它按马力(int 变量)对 Golf 个实例进行排序。我想知道是否可以对升序和降序使用相同的比较器。

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 实现对它们进行升序或降序排序?

您可以使用Collections::reverseOrder按降序排列。例如:

GolfHorsePowerComparator golfHorsePowerComparator = new GolfHorsePowerComparator();
Collections.sort(golfList, Collections.reverseOrder(golfHorsePowerComparator));

是的,请看documentationComparator 有一个 reversed 方法。你可以简单地这样做:

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

第一个按升序排列,第二个按降序排列。