Java单表链接外表id数据填充

    /**
     * @param isExecute          判断是否执行
     * @param dataList           数据源
     * @param getForeignKey      数据模型获取外键方法
     * @param foreignService     外键表Service
     * @param getEqKey           获取外键表id方法
     * @param convert            转换方法
     * @param lambdaQueryWrapper 额外的查询体检
     * @param <R>
     */
    public <T1, T2, R extends Serializable> void executeShowJoin(
            boolean isExecute,
            List<T1> dataList, Function<T1, R> getForeignKey,
            IService<T2> foreignService, SFunction<T2, R> getEqKey,
            IConvert<T1, T2> convert,
            LambdaQueryWrapper<T2> lambdaQueryWrapper
    ) {
        if (!isExecute) {
            return;
        }

        Set<R> keySet = dataList.stream().map(getForeignKey).collect(Collectors.toSet());
        if (keySet.isEmpty()) {
            return;
        }

        LambdaQueryWrapper<T2> query = null != lambdaQueryWrapper ? lambdaQueryWrapper : Wrappers.<T2>lambdaQuery();
        List<T2> foreignObjList = foreignService.list(query.in(getEqKey, keySet));
        if (foreignObjList.isEmpty()) {
            return;
        }

        //TODO 如果这个getEqKey 不是唯一的话就会有问题,可以改为groupBy进行处理
        Map<R, T2> t2Map = foreignObjList.stream().collect(Collectors.toMap(getEqKey, t2 -> t2, (o, n) -> n));

        dataList.forEach(t1 -> {
            R r = getForeignKey.apply(t1);
            T2 t2 = t2Map.get(r);
            if (null == t2) {
                return;
            }
            convert.accept(t1, t2);
        });
    }

    @FunctionalInterface
    public interface IConvert<T, T2> {
        void accept(T t, T2 t2);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值