Map<Object, List<Object>>返回满足条件的数据
当一个表查询多次时,为了减少数据库的查询操作,可以使用stream流来进行条件筛选,获取所需要的数据。
例:
Map<Long, List<PurchaseOrder>> orderMap = orderService.list(Wrappers.<PurchaseOrder>lambdaQuery()
.select(PurchaseOrder::getId,PurchaseOrder::getSupplierId,PurchaseOrder::getCreateTime,PurchaseOrder::getTotalPrice)
.in(PurchaseOrder::getSupplierId, supplierIds)
.notIn(PurchaseOrder::getOrderStatus, orderStatus)).stream()
.collect(Collectors.groupingBy(PurchaseOrder::getSupplierId));
// 减少数据库查询操作,创建一个新的 Map,用于存储供应商ID及其符合条件的订单列表
Map<Long, List<PurchaseOrder>> thisYearCumulativeMap = orderMap.entrySet().stream()
.map(entry -> { // 对原始订单映射操作,得到新的 Entry(供应商ID和符合条件的订单列表)
// 获取供应商ID
Long supplierId = entry.getKey();
// 过滤订单列表,只保留符合条件的订单
List<PurchaseOrder> orders = entry.getValue().stream()
.filter(order -> {
// 获取订单创建时间(可能为null)
Optional<Date> optionalDate = Optional.ofNullable(order.getCreateTime());
// 如果创建时间存在,则判断是否在本年度范围内
return optionalDate.map(createTime ->
createTime.after(DateUtils.stringToDate(DateUtils.getStartOfYear())) &&
createTime.before(DateUtils.stringToDate(DateUtils.getEndDayOfYear()))
).orElse(false); // 如果创建时间为null,则返回false
})
.collect(Collectors.toList()); // 将符合条件的订单收集为列表
return new AbstractMap.SimpleEntry<>(supplierId, orders); // 返回新的 Entry,包含供应商ID和符合条件的订单列表
})
.filter(entry -> !entry.getValue().isEmpty()) //过滤掉没有符合条件的订单的供应商
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); //将最终的结果收集为新的 Map
原文地址:https://blog.csdn.net/LMY0210/article/details/134649756
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_39560.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。