前言
在开发过程中,会遇到很多针对List集合进行处理,比如转换、比较等,接下来就来总结一下。
- 比较基础数据list和目标list,返回目标list中没有的数据和不一致的数据
/**
* 比较基础数据list和目标list,返回目标list中没有的数据和不一致的数据
*
* @param basicList 基础数据list
* @param targetList 目标list
* @param index 主键
* @return
*/
public static Map<String, List<Map<String, Object>>> checkDiffList(List<Map<String, Object>> basicList, List<Map<String, Object>> targetList, String... index) {
Map<String, Map<String, Object>> basicMap = checkListToMap(basicList, index);
Map<String, Map<String, Object>> targetMap = checkListToMap(targetList, index);
Map<String, List<Map<String, Object>>> result = new HashMap<>();
List<Map<String, Object>> insertList = Lists.newArrayList();
List<Map<String, Object>> updateList = Lists.newArrayList();
basicMap.forEach((k, v) -> {
Map<String, Object> tblData = targetMap.get(k);
if (tblData == null) {
insertList.add(v);
} else {
if (checkDiffMap(v, tblData)) {
updateList.add(v);
}
}
});
result.put("insertList", insertList);
result.put("updateList", updateList);
return result;
}
- 根据index数组返回比对数据Map
/**
* 根据index数组返回比对数据Map
*
* @param list
* @param index
* @return
*/
private static Map<String, Map<String, Object>> checkListToMap(List<Map<String, Object>> list, String... index) {
return list.stream().collect(Collectors.toMap(e -> {
StringBuilder key = new StringBuilder();
for (String item : index) {
key.append(Optional.ofNullable(e.get(item)).orElse("")).append("_");
}
return key.toString();
}, e -> e, (k1, k2) -> k1));
}
- 比对两个map数据是否一致
在这里插入代码片
/**
* 比对两个map 如果数据不一致 则返回true
*
* @param source 基础数据list
* @param target 目标list
* @return 是否一致
*/
public static Boolean checkDiffMap(Map<String, Object> source, Map<String, Object> target) {
source = new TreeMap<>(source);
target = new TreeMap<>(target);
String sourceStr = JsonUtils.toStr(source);
String targetStr = JsonUtils.toStr(target);
return !(StringUtils.compare(sourceStr, targetStr) == 0);
}