zoukankan      html  css  js  c++  java
  • java实现多个属性排序---按照实体的多种属性值进行排序(ComparableComparator/ComparatorChain)

    一、在项目的开发过程中,获取快递物流信息之后,对于快递路由列表信息进行按照时间进行倒序排序,由此做的一些记录和总结

     1 // 获取物流信息 ExpressRouteVO实体在后面
     2 List<ExpressRouteVO> routeList = getExpressRouteByNo(entity.getBillNo());
     3 
     4 Comparator mycmp1 = ComparableComparator.getInstance();
     5 //默认为正序,我们这边设置为逆序
     6 mycmp1 = ComparatorUtils.reversedComparator(mycmp1);
     7 ArrayList<Object> sortFields = new ArrayList<Object>();
     8 sortFields.add(new BeanComparator("time", mycmp1));
     9 //创建一个排序链
    10 ComparatorChain multiSort = new ComparatorChain(sortFields);
    11 Collections.sort(routeList, multiSort);
    12 params.put("expressDataList", routeList);
    
    

    二、以下是在网络找到的一些参考,可以实现多种属性的排序

     1 Comparator mycmp1 = ComparableComparator.getInstance ();
     2 mycmp1 = ComparatorUtils. reversedComparator(mycmp1); //逆序
     3  
     4 Comparator mycmp2 = ComparableComparator.getInstance ();
     5 mycmp2 = ComparatorUtils. nullHighComparator(mycmp2); //允许null
     6  
     7 // 声明要排序的对象的属性,并指明所使用的排序规则,如果不指明,则用默认排序
     8 ArrayList<Object> sortFields = new ArrayList<Object>();
     9 sortFields.add( new BeanComparator("age" , mycmp1)); //主排序(第一排序)
    10 sortFields.add( new BeanComparator("grade" , mycmp2)); //次排序(第二排序)
    11  
    12 // 创建一个排序链
    13 ComparatorChain multiSort = new ComparatorChain(sortFields);
    14  
    15 // 开始真正的排序,按照先主,后副的规则
    16 Collections.sort (users , multiSort);
    
    

    三,通过以下ComparableComparator的使用,我们可以比较方便的进行多种属性的排序,这里只是简要做个记录,有时间得对实体排序的方法做更多的了解,对于方法的底层实现做进一步的理解。

    参考资料:https://blog.csdn.net/lizeyang/article/details/8877868https://blog.csdn.net/qq_37107280/article/details/75570969

    -------------------------------

    import java.io.Serializable;

    /**
    * 路由节点信息
    */
    public class ExpressRouteVO implements Serializable {

    private String time;

    private String address;

    private String remark;

    private String opCode;

    public String getTime() {
    return time;
    }

    public void setTime(String time) {
    this.time = time;
    }

    public String getAddress() {
    return address;
    }

    public void setAddress(String address) {
    this.address = address;
    }

    public String getRemark() {
    return remark;
    }

    public void setRemark(String remark) {
    this.remark = remark;
    }

    public String getOpCode() {
    return opCode;
    }

    public void setOpCode(String opCode) {
    this.opCode = opCode;
    }
    }

    -------------------------------------------
     

  • 相关阅读:
    EXTJS 动态改变Gird 列值
    EXTJS动态改变store的proxy的params
    获取Spring容器Bean
    EXTJS 6 必填项加星号*
    Maven打包附加配置文件
    MyEclipse 优化
    Android-SurfaceView生命周期
    Android-PopupWindow
    Android-Sqlite3的使用
    Android-adb的使用
  • 原文地址:https://www.cnblogs.com/zluckiy/p/11455585.html
Copyright © 2011-2022 走看看