根据集合中 某两个属性 进行集合排序

本文介绍了一种通用的集合排序方法,该方法能够根据指定的属性进行排序,并支持正序和倒序。通过实例演示了如何在Java中实现这一功能,特别适用于处理包含多个属性的对象集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用场景:

某个集合封装的是 一个uservo对象(比如uservo中有属性  id, name, priority(优先级) ,pid(部门id))

现在要根据集合中uservo对象的部门优先级先排 然后根据 个人的优先级排,这种情况就可以拼凑一个临时的vo,

封装在一个集合中,然后就可以根据以下方法对集合进行排序

当然,有些大牛可以自己拼sql语言,把这个需求按优先级排好,但是我不会,只想到了下面这个方法,哈哈~~


   /**

    * 通用集合排序
    * @param workItemList
    * @param method  按workItemList中的第一个属性排序  workItemList中实体的get方法的属性
    * @param method2 按workItemList中的第二个属性排序 workItemList中实体的get方法的属性
    * @param sort 第一个属性排序规则 升 or 降
    * @param sort2  第二个属性排序规则 升 or 降
    */
    private void arrayListSort(List workItemList, final String method, final String method2, final String sort, final String sort2) {
    Collections.sort(workItemList, new Comparator() { 
    public int compare(Object a, Object b) {
    int ret = 0;
    try{
   Method m1 = (a).getClass().getMethod(method, null);
   Method m2 = (b).getClass().getMethod(method, null);
   Method personalNum1 = (a).getClass().getMethod(method2, null);
   Method personalNum2 = (b).getClass().getMethod(method2, null);
   if(m1.invoke((b), null)!=null&&m2.invoke((a), null)==null) {
    return 1;
   }
   if(m1.invoke((b), null)==null&&m2.invoke((a), null)!=null) {
    return -1;
   }
   if(m1.invoke((b), null)==null&&m2.invoke((a), null)==null) {
    return 0;
   }
   if(sort != null && "desc".equalsIgnoreCase(sort)) {//倒序
    ret = m2.invoke((b), null).toString().compareTo(m1.invoke((a), null).toString());
    if(ret==0 && "desc".equalsIgnoreCase(sort2)){
    ret = personalNum2.invoke((b), null).toString().compareTo(personalNum1.invoke((a), null).toString());
    }else if(ret==0 && "asc".equalsIgnoreCase(sort2)){
    ret = personalNum1.invoke((a), null).toString().compareTo(personalNum2.invoke((b), null).toString());
    }
   }else{//正序
    ret = m1.invoke((a), null).toString().compareTo(m2.invoke((b), null).toString());
    if(ret==0 && "desc".equalsIgnoreCase(sort2)){
    ret = personalNum2.invoke((b), null).toString().compareTo(personalNum1.invoke((a), null).toString());
    }else if(ret==0 && "asc".equalsIgnoreCase(sort2)){
    ret = personalNum1.invoke((a), null).toString().compareTo(personalNum2.invoke((b), null).toString());
    }
   }
    }catch(NoSuchMethodException ne){
    System.out.println(ne);
    }catch(IllegalAccessException ie){
    System.out.println(ie);
    }catch(InvocationTargetException it){
    System.out.println(it);
    }
    return ret;
    }
    });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值