ListChangeUtil ツール クラス、差分の比較 ADD インクリメント セット、DELETE デクリメント セット

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;
        });
    }
}

おすすめ

転載: blog.csdn.net/scdncby/article/details/131916314