小宇 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 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目