fix:封装函数 convertCDUMap 作用:数据划分为需要新增的、还是删除的、还是更新的。

This commit is contained in:
puhui999
2023-07-28 16:30:38 +08:00
parent 6a38738760
commit 446951bd11
6 changed files with 96 additions and 51 deletions

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.common.util.collection;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import com.google.common.collect.ImmutableMap;
import java.util.*;
@ -149,6 +150,41 @@ public class CollectionUtils {
return builder.build();
}
/**
* 数据划分为需要新增的、还是删除的、还是更新的。
*
* @param list1 需要处理的数据的相关编号列表
* @param list2 数据库中存在的数据的相关编号列表
* @param func 比较出哪些记录是新增,还是修改,还是删除
* @return 包含需要新增、修改、删除的数据 Map 对象
*/
public static <D> Map<String, List<D>> convertCDUMap(Collection<Long> list1, Collection<Long> list2,
Function<Map<String, List<Long>>, Map<String, List<D>>> func) {
HashMap<String, List<Long>> mapData = MapUtil.newHashMap(3);
if (CollUtil.isEmpty(list1)) {
return func.apply(mapData);
}
if (CollUtil.isEmpty(list2)) {
return func.apply(mapData);
}
// 后台存在的前端不存在的
List<Long> d = CollectionUtils.filterList(list2, item -> !list1.contains(item));
if (CollUtil.isNotEmpty(d)) {
mapData.put("delete", d);
}
// 前端存在的后端不存在的
List<Long> c = CollectionUtils.filterList(list1, item -> !list2.contains(item));
if (CollUtil.isNotEmpty(c)) {
mapData.put("create", c);
}
// 更新已存在的
List<Long> u = CollectionUtils.filterList(list1, list2::contains);
if (CollUtil.isNotEmpty(u)) {
mapData.put("update", u);
}
return func.apply(mapData);
}
public static boolean containsAny(Collection<?> source, Collection<?> candidates) {
return org.springframework.util.CollectionUtils.containsAny(source, candidates);
}