将list中某一属性相同的数据分组

下面的举例:

1 从数据库中取到了10条数据,放到了list中,这十条数据包含如下字段:订单号,订单明细号,发票号

2 10条数据中订单明细号都是不同的,但是订单号是可以相同的,假设订单号前三个是A,后三个是B,最后四个是C

3 那么问题来了,由于业务需要,现在只想取每笔订单的第一条明细订单的发票,请问该如何实现呢?

4.订单编号中的相同的数据是连续的

思路:首先获得所有数据list(orders),创建返回的list(targetOrders)
然后将第一条存储进去list(targetOrders),默认订单编号orderId为第一条的数据的
最后遍历list(order),因为订单编号中的相同的数据是连续的,所以从第二条数据起,只要跟第一条相同的就跳过,不同的就设置新的默认orderId,并将这一条新的orderId的数据存储进去list(targetOrder)

将list中某一属性相同的数据分组_第1张图片


//数据库所有订单
List<Order> orders = getOrders();
//创建返回目标订单,储存每笔订单的第一条明细订单的发票
List<Order> targetOrders = new Arraylist<Order>;

//第一条就是第一个订单的明细
Order order = list.get(0);
//首先将第一条数据存进去需要返回的订单中
targetOrders.add(order );

//获取第一条订单编号
Integer currentOrderId = order.getOrderId();

//从第二个记录开始,找下一条订单的明细
if(list.size()>1){
     for(int i =1;i<list.size();i++){
              Order order2 = list.get(i);
               //订单编号是同一条,继续找
               if(currentOrderId == order2.getOrderId()){
                   continue;
               }
				//设置下一个编号
               currentOrderId = order2.getOrderId();
               //找到了,就存储到返回的list中
               targetOrders.add(order2);
         }
}

你可能感兴趣的:(数据处理)