Java Comparable排序规则自定义

1.Comparable规范
public static int compare(long x, long y) {
    return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

这是Long的compare方法,Comparable规范就是约定了两个值比较后如何排序的问题, 给定两个值x和y,如果x排y的后面则返回1,如果x排y的前面则返回-1,如果x和y排序位置相同(名义上相同,实际在列表中还是有先后)则返回0。姑且把这个排序规则叫做“正序排列”,这个顺序是人为确定的。

2.排序反转

如果要把这个规则反转成“倒序排列”怎么办呢?一种方法是重写compare(long x, long y)成下面的形式:

List<Long> list = new ArrayList<>();
list.add(3L);
list.add(1L);
list.add(2L);
        
public static int compare(long x, long y) {
    return (x < y) ? 1 : ((x == y) ? 0 : -1);
}

list.sort((x,y) -> compare(x, y));

还有一种方案就是在调用Long.compare方法是时候把x和y的位置对调:

list.sort((x,y) -> Long.compare(y, x));

还有一种方法是在调用Long.compare方法前加负号实现反转:

list.sort((x,y) -> -Long.compare(x, y));
3.测试
public static void main(String[] args) {
    List<Long> list = new ArrayList<>();
    list.add(3L);
    list.add(1L);
    list.add(2L);

    list.sort((x,y) -> Long.compare(x,y)); //正序排列
    System.out.println(list); //[1, 2, 3]
    list.sort((x,y) -> Long.compare(y,x)); //倒序排列
    System.out.println(list); //[3, 2, 1]
    list.sort((x,y) -> -Long.compare(x,y)); //倒序排列,等价于Long.compare(y,x)
    System.out.println(list); //[3, 2, 1]
    list.sort((x,y) -> -Long.compare(y,x)); //正序排列,等价于Long.compare(x,y)
    System.out.println(list); //[1, 2, 3]
    //将Long.compare换成Integer.compare等实现了Comparable规范的方法同样成立
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值