小宇 2021-06-07 14:57 采纳率: 60%
浏览 108
已采纳

一个java List排序实现compare的问题

下面实现的compare是按对象的a属性倒序排序,如何在这个排序中排除掉b属性等于4或5的,
相当于b属性等于4或5的不参与这个倒序排序

List<AA> list = new ArrayList<>();
AA a1 = new AA().setA(1).setB(4);
AA a2 = new AA().setA(0).setB(3);
AA a3 = new AA().setA(0).setB(5);
AA a4 = new AA().setA(0).setB(2);
AA a5 = new AA().setA(1).setB(5);
AA a6 = new AA().setA(1).setB(1);
AA a7 = new AA().setA(0).setB(0);
AA a8 = new AA().setA(1).setB(5);
list.add(a1);list.add(a2);list.add(a3);list.add(a4);list.add(a5);list.add(a6);list.add(a7);list.add(a8);
list.sort((x,y)->{
    if(x.getA() > y.getA()){
        return -1;
    }
    if(x.getA() == y.getA()){
        return 0;
    }
    return 1;

});
  • 写回答

4条回答 默认 最新

  • 关注
    package com.xm.officialaccounts.utils;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    /**
     * @author 
     * @date created in 17:03 2021/6/4
     */
    public class a implements Comparable{
        int a;
        int b;
        @Override
        public int compareTo(Object o) {
            a other = (a)o;
            if(b == 4 || b == 5){
                if(other.b == 4 || other.b == 5){
                    // 都是a=0级别
                    return 0;
                }else {
                    return 0 >  other.a ? -1 :1;
                }
            }else {
                if(other.b == 4 || other.b == 5){
                    return a > 0 ? -1:1;
                }else {
                    return a > other.a ? -1:1;
                }
            }
        }
        public a(int a,int b){
            this.a = a;
            this.b = b;
        }
    
        public static void main(String[] args) {
            List<a> list = new ArrayList<>();
            a a1 = new a(1,4);
            a a2 = new a(0,3);
            a a3 = new a(0,5);
            a a4 = new a(0,2);
            a a5 = new a(1,5);
            a a6 = new a(1,1);
            a a7 = new a(0,0);
            a a8 = new a(1,5);
            list.add(a1);list.add(a2);list.add(a3);list.add(a4);list.add(a5);list.add(a6);list.add(a7);list.add(a8);
            Collections.sort(list);
            list.stream().forEach(t ->System.out.println(t.a+"========="+t.b));
        }
    
    /*      1=========1
            1=========4
            0=========3
            0=========5
            0=========2
            1=========5
            0=========0
            1=========5*/
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器