List<PchSpareDeliveryDetail>[] arr = CompareUtils.allSet(oldList, detailList, PchSpareDeliveryDetail::getId);
addList = arr[0];
updList = arr[1];
delList = arr[2];
/**
* 获取target 所有集合
*
* @param source
* @param target
* @param getKey
* @param <T>
* @return
*/
public static <T> List<T>[] allSet(List<T> source, List<T> target, Function<T, String> getKey) {
List<T> addList = new ArrayList<>();
List<T> updList = new ArrayList<>();
List<T> delList = new ArrayList<>();
Map<String, T> hasMap = new HashMap<>(source.size());
source.forEach(item -> {
String key = getKey.apply(item);
hasMap.put(key, item);
});
target.forEach(item -> {
String key = getKey.apply(item);
if (!hasMap.containsKey(key)) {
addList.add(item);
} else {
T t = hasMap.get(key);
String tmd5 = DigestUtils.md5Hex(JSON.toJSONString(t));
String smd5 = DigestUtils.md5Hex(JSON.toJSONString(item));
if (!smd5.equals(tmd5)) {
updList.add(item);
}
hasMap.remove(key);
}
});
if (!hasMap.isEmpty()) {
Set<Map.Entry<String, T>> entry = hasMap.entrySet();
entry.forEach(etry -> {
delList.add(etry.getValue());
});
}
return new List[]{addList, updList, delList};
}