1 从数据库中取到了10条数据,放到了list中,这十条数据包含如下字段:订单号,订单明细号,发票号
2 10条数据中订单明细号都是不同的,但是订单号是可以相同的,假设订单号前三个是A,后三个是B,最后四个是C
3 那么问题来了,由于业务需要,现在只想取每笔订单的第一条明细订单的发票,请问该如何实现呢
lambda表达式出现之前可以遍历使用map进行分组。
而在 Java 8 中,你可以使用 groupingBy 收集器,一条语句就能完成相同的功能,像这样:
Map> OrderMap =
list.stream().collect(groupingBy(Order::getOrderId));
首先,你从数据库获取的订单列表的时候之前,使用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());
}
}
可你按你的情况修改,主要就是订单的编号,和订单明细的属性的获取。如果是当前订单,就继续找下一条订单。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。