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;
    }
    }

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

  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/zluckiy/p/11455585.html
Copyright © 2011-2022 走看看