/**
* @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);
}
Java单表链接外表id数据填充
最新推荐文章于 2024-05-14 08:43:31 发布