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;
    }
}
复制代码

 

posted @   Jager  阅读(9051)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2015-11-17 微信支付宝签约流程总结
2015-11-17 微信支付宝扫码支付相关接口
点击右上角即可分享
微信分享提示