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

时间:2019-04-07 16:29:35

标签: java algorithm sorting comparator

我试图找到一种定义java.util.Comparator的唯一实现的方法,该实现可用于升序和降序。

我定义了一个Golf.java类,它代表大众汽车。我还定义了一个比较器,该比较器通过功率(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 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

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

第一个是升序,第二个是降序。