我正在使用Java Comparator在我的代码中进行排序.我怎么只能按某些值排序,例如,值范围从1到1000,(默认值是1000),但我只想提升排序以显示1,2,3,4,5,1000 ...,并且降序排序显示5,4,3,2,1,1000 ....我该怎么做?谢谢,
大卫
下面的比较器将值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)然后排序可能会进入无限循环.
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |