如何使用Java比较器忽略某些值进行排序

Dav*_*hao 1 java

我正在使用Java Comparator在我的代码中进行排序.我怎么只能按某些值排序,例如,值范围从1到1000,(默认值是1000),但我只想提升排序以显示1,2,3,4,5,1000 ...,并且降序排序显示5,4,3,2,1,1000 ....我该怎么做?谢谢,

大卫

Jim*_*son 6

下面的比较器将值1000视为始终比其他所有值"更大"; 1000将始终排序最后.任何其他值按升序或降序排序.

class AscendingComp implements Comparator<Integer>
{
    @Override
    public int compare(Integer o1, Integer o2)
    {
        if (o1.equals(o2))   return 0;
        if (o1.equals(1000)) return 1;
        if (o2.equals(1000)) return -1;
        return o1.compareTo(o2);
    }
}
class DescendingComp implements Comparator<Integer>
{
    @Override
    public int compare(Integer o1, Integer o2)
    {
        if (o1.equals(o2))   return 0;
        if (o1.equals(1000)) return 1;
        if (o2.equals(1000)) return -1;
        return o2.compareTo(o1);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:这不是一般解决方案,但回答了具体问题.在一个通用的解决方案,你一定要注意合同equals()和compare(),尤其是千万不要返回不一致的比较结果.例如,如果你不小心并且不小心返回,比如说+1 compare(a,b),compare(b,a)然后排序可能会进入无限循环.