Java Comparable排序规则自定义

2023-12-14 16:18:12
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规范的方法同样成立
}

文章来源:https://blog.csdn.net/xhom_w/article/details/134872367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。