zoukankan      html  css  js  c++  java
  • List对象分组排序算法

     场景:

      List里面的对象是订单的节点,比如我们快递的物流状态,这个是需要有序的,所以需要根据订单号进行分组排序。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class GroupSortTest {
        public static void main(String[] args) {
        
            List<Order> list = new ArrayList<Order>();
            Order o1 = new Order("10086","3",(long) 1008603);
            Order o2 = new Order("10086","2",(long) 1008602);
            Order o3 = new Order("10086","1",(long) 1008601);
            Order o4 = new Order("10010","1",(long) 1001001);
            Order o5 = new Order("10000","3",(long) 1000003);
            Order o6 = new Order("10010","3",(long) 1001003);
            Order o7 = new Order("10000","1",(long) 1000001);
            Order o8 = new Order("10000","2",(long) 1000002);
            Order o9 = new Order("10010","2",(long) 1001002);
            
            list.add(o1);
            list.add(o2);
            list.add(o3);
            list.add(o4);
            list.add(o5);
            list.add(o6);
            list.add(o7);
            list.add(o8);
            list.add(o9);
            
            Map<String, List<Order>> map = OrderSortByGroup(list);
            
            for(Map.Entry<String, List<Order>> entry : map.entrySet()){
                for(Order o : entry.getValue() ){
                    System.out.println(entry.getKey() +"--"+o.getSeq()+"--"+o.getStatusId());
                }
            }
            
        }
        
        public static Map<String, List<Order>> OrderSortByGroup(List<Order> list){
            Map<String, List<Order>> map = new HashMap<String, List<Order>>();
            for(Order order : list) {
                List<Order> staList = map.get(order.orderNo);
                if(staList==null){
                    staList = new ArrayList<Order>();
                }
                Order od = new Order();
                od.setSeq(order.seq);od.setStatusId(order.statusId);
                staList.add(od);
                
                Collections.sort(staList, new Comparator<Order>() {
                    @Override
                    public int compare(Order o1, Order o2) {
                        return o1.getSeq().compareTo(o2.getSeq());
                    }
                });
                
                map.put(order.orderNo, staList);
            }
            return map;
        }
        
    }
    
    class Order {
        String orderNo;    //订单号
        String seq;        //订单节点序号
        Long statusId;    //订单节点主键
        
        public Order() {}
        
        public Order(String orderNo, String seq, Long statusId) {
            super();
            this.orderNo = orderNo;
            this.seq = seq;
            this.statusId = statusId;
        }
    
        public String getOrderNo() {
            return orderNo;
        }
        public void setOrderNo(String orderNo) {
            this.orderNo = orderNo;
        }
        public String getSeq() {
            return seq;
        }
        public void setSeq(String seq) {
            this.seq = seq;
        }
        public Long getStatusId() {
            return statusId;
        }
        public void setStatusId(Long statusId) {
            this.statusId = statusId;
        }
    }
  • 相关阅读:
    unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
    Go的学习笔记之Channel发送和接收
    聊聊 PC 端自动化最佳方案
    一文彻底搞懂快速幂(原理实现、矩阵快速幂)
    一次core.<number> 文件占满磁盘空间的处理过程
    博文目录
    备忘录:C#获取微信小程序的云数据库中数据
    T-SQL——关于跨库连接查询
    .NET异步程序设计——给线程传递数据
    自研 Pulsar Starter:winfun-pulsar-spring-boot-starter
  • 原文地址:https://www.cnblogs.com/jager/p/6072987.html
Copyright © 2011-2022 走看看