/** 对集合进行比较,获取增删值进行更新操作
* @param oldArr 旧数组
* @param newArr 新数组
* @return Map 包含两个数组,相较于旧数组,新数组多了哪些元素,以及少了哪些元素
*/
public static Map<String, String[]> CompareStringArray(String[] oldArr, String[] newArr){
List<String> addList = new ArrayList<>();
List<String> deleteList = new ArrayList<>();
for (String anOldArr : oldArr) {
if (!ArrayUtils.contains(newArr, anOldArr)) {
deleteList.add(anOldArr);
}
}
for (String aNewArr : newArr) {
if (!ArrayUtils.contains(oldArr, aNewArr)) {
addList.add(aNewArr);
}
}
String[] addArr = addList.toArray(new String[addList.size()]);
String[] deleteArr = deleteList.toArray(new String[deleteList.size()]);
Map<String, String[]> res = new HashMap<>();
res.put("addArr", addArr);
res.put("deleteArr", deleteArr);
return res;
}
/**
* 假设需要进行某些权限或者菜单的变更,但是关联的数据中间表的某些字段变动可能会出现问题,不建议直接删除全部关联的历史数据然后再进行添加;
* 这里先将旧数据与新数据进行比较,比较完成之后获取差集进行删除,有新增则进行新增变更
* @param args
*/
public static void main(String[] args) {
String old = "0,1,3,5,7"; //旧数据
String news= "0,1,5,3,9,6"; //新的待变更数据
Map<String, String[]> packageIsChange = StringUtils.CompareStringArray(old.split(","),news.split(","));
boolean excludeUser = packageIsChange.get("deleteArr").length>0 && packageIsChange.get("deleteArr") !=null;
boolean addUserMenu = packageIsChange.get("addArr").length>0 && packageIsChange.get("addArr") !=null;
//判断数据是否有变更,没有变更直接结束
if (excludeUser||addUserMenu ) {
//先删除被去掉的菜单
if (excludeUser){
//删除旧的已变更的数据
System.out.println(excludeUser);
System.out.println(Arrays.asList(packageIsChange.get("deleteArr")));
}
//添加新增的菜单
if (addUserMenu){
System.out.println(addUserMenu);
System.out.println(Arrays.asList(packageIsChange.get("addArr")));
}
}
//结束
}
工具类(对两个集合进行筛选,获取增值和差值进行增删更新操作)
于 2023-12-29 17:14:42 首次发布