import java.util.Collection;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
/**
* @author chenyb
* @version 2.0.0
* @jdk 1.8
* @Description List 变化处理
* @Result.getAddList 增量集合
* @Result.getDeleteList 减量集合
* @date 2023/8/2
*/
public class ListChangeUtil<T> {
private ListChangeUtil() {}
/**
* 返回封装类 Result
* @param <T>
*/
public static class Result<T>{
private Collection<T> addCollection;
private Collection<T> delCollection;
private Result() {}
public Collection<T> getAddCollection() {
return addCollection;
}
public void setAddCollection(Collection<T> addCollection) {
this.addCollection = addCollection;
}
public Collection<T> getDelCollection() {
return delCollection;
}
public void setDelCollection(Collection<T> delCollection) {
this.delCollection = delCollection;
}
@Override
public String toString() {
return "Result{" +
"addCollection=" + addCollection +
", delCollection=" + delCollection +
'}';
}
}
private static <T> Result<T> listChange(
Collection<T> oldCollection, Collection<T> newCollection, BiFunction<Collection<T>,Collection<T>, Result<T>> result
){
return result.apply(oldCollection,newCollection);
}
/**
* 对外暴漏功能方法
* old集合与new集合对比
* 识别增量与减量
* @param oldCollection
* @param newCollection
* @param <T>
* @return
*/
public static <T> Result<T> change(final Collection<T> oldCollection, final Collection<T> newCollection) {
return listChange(oldCollection, newCollection, (o, n) -> {
Result<T> result = new Result<>();
// 过滤无效对比
if (null == o || 0 == o.size()) {
if (null != n && 0 < n.size()) {
result.setAddCollection(n);
}
} else if (null == n || 0 == n.size()) {
result.setDelCollection(o);
}
// 增量集合
result.setAddCollection(n.stream().filter(nf -> !o.contains(nf)).collect(Collectors.toSet()));
// 减量集合
result.setDelCollection(o.stream().filter(of -> !n.contains(of)).collect(Collectors.toSet()));
return result;
});
}
}
ListChangeUtil工具类,对比差异度ADD增量集、DELETE减量集
于 2023-07-25 14:09:20 首次发布