开发者社区> 问答> 正文

如何让list中某一属性相同的数据分组呢

1 从数据库中取到了10条数据,放到了list中,这十条数据包含如下字段:订单号,订单明细号,发票号
2 10条数据中订单明细号都是不同的,但是订单号是可以相同的,假设订单号前三个是A,后三个是B,最后四个是C
3 那么问题来了,由于业务需要,现在只想取每笔订单的第一条明细订单的发票,请问该如何实现呢

展开
收起
吴孟桥 2016-06-16 15:35:43 4451 0
2 条回答
写回答
取消 提交回答
  • lambda表达式出现之前可以遍历使用map进行分组。
    而在 Java 8 中,你可以使用 groupingBy 收集器,一条语句就能完成相同的功能,像这样:
    Map> OrderMap =
    list.stream().collect(groupingBy(Order::getOrderId));

    2019-07-17 19:41:04
    赞同 展开评论 打赏
  • 首先,你从数据库获取的订单列表的时候之前,使用sql查询的时候就按订单编号排序,即order by 订单编号;包装订单编号相同的记录在一块的。
    最后,就遍历这个订单,取每个订单编号的第一条数据后,找下一个订单号,依次取出所有订单的第一条数据,用Map 存储。
    你的订单编号肯定对应一个Java对象的,遍历list如下:

    Map<String,String> map = new HashMap<String,String>();
    //第一条就是第一个订单的明细
    Order order = list.get(0);
    String currentOrderId = order.getOrderId();
    map.put(currentOrderId,order.getDetail());
    //从第二个记录开始,找下一条订单的明细
    if(list.size()>1){
         for(int i =1;i<list.size();i++){
                  Order order = list.get(i);
                        //订单编号是同一条,继续找
                        if(currentOrderId.equals.(order.getOrderId()){
                             continue;
                        }
    
                        //找到了,就存储
                        currentOrderId = order.getOrderId();
                        map.put(currentOrderId,order.getDetail());
             }
    }

    可你按你的情况修改,主要就是订单的编号,和订单明细的属性的获取。如果是当前订单,就继续找下一条订单。

    2019-07-17 19:41:03
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对 2000 多亿条数据做一次 group by 需要多久? 立即下载
对2000多亿条数据做一次Group By 需要多久 立即下载
低代码开发师(初级)实战教程 立即下载