conllections.sort-排序字段相等的时候处理

 

示例代码一

public static void demo() {
        Person p9 = new Person();
        p9.setName("张9");
        p9.setAddress("成都9");
        p9.setAge(9);
        Person p1 = new Person();
        p1.setName("张1");
        p1.setAddress("成都1");
        p1.setAge(1);
        Person p2 = new Person();
        p2.setName("张2");
        p2.setAddress("成都2");
        Person p3 = new Person();
        p3.setName("张3");
        p3.setAddress("成都3");
        p3.setAge(1);
        ArrayList<Person> list = new ArrayList<>();
        list.add(p3);
        list.add(p9);
        list.add(p1);
        list.add(p2);

        System.out.println(list.toString());
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if(o1.getAge() > o2.getAge()){

                    return 1;
                }
                //if (o1.getAge() == o2.getAge()){
                //    return 0;
                //}
                return -1;
            }
        });
        System.out.println(list.toString());

    }

输出结果

[Person{name='张3', age=1, address='成都3'}, Person{name='张9', age=9, address='成都9'}, Person{name='张1', age=1, address='成都1'}, Person{name='张2', age=0, address='成都2'}]
[Person{name='张2', age=0, address='成都2'}, Person{name='张1', age=1, address='成都1'}, Person{name='张3', age=1, address='成都3'}, Person{name='张9', age=9, address='成都9'}]

 

 

将示例代码中,把注释的代码注释去掉,可以正常显示,也就是当排序的序号相同的时候,需要返回return 0 ,这样就可以保持排序不变。

if (o1.getSort() == o2.getSort()) {
                        return 0;
                    }
返回值含义
负整数当前对象的值 < 比较对象的值 , 位置排在前
当前对象的值 = 比较对象的值 , 位置不变
正整数当前对象的值 > 比较对象的值 , 位置排在后

这里我们需要升序排列 ,如果if中如果是true就说明o1.getAge() > o2.getAge(),也就是排在前面的比排在后面的大,因为我们是升序,因此需要换位置,也就是当前对象需要在比较对象的后面,如果o1.getAge() == o2.getAge(),这不变位置,其他情况都将当前对象放在对比对象之前,这里的其实情况也就是o1.getAge()  < o2.getAge() 的时候

if(o1.getAge() > o2.getAge()){

                    return 1;
                }

如果需要降序排序可以写成

 @Override
            public int compare(Person o1, Person o2) {
                if(o1.getAge() > o2.getAge()){

                    return -1;
                }
                if (o1.getAge() == o2.getAge()){
                    return 0;
                }
                return 1;
            }

备注:如果是单独的比较比如定义一个

         int[] a = {1,5,2,,7,6,11,66,22};

         这样定义,Arrays.sort()为默认排序,如果需要改变默认排序就需要通过compartor来实现,这是需要用integer才行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值