Map<Object, List<Object>>返回满足条件的数据

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值