java求两个集合的addList,updateList,delList

本文介绍了一个名为CollectionCompareLite的Java类,用于处理两个集合之间的新增(added)、修改(modified)和删除(deleted)操作。通过提供新旧集合和属性映射函数,它生成了addList, updateList, delList三个列表,便于分析和处理数据变更。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java求两个集合的addList,updateList,delList

public class CollectionCompareLite<N, O, T> {

    static enum PropertyChangeType {
        ADDED,
        MODIFIED,
        DELETED
    }

    private Map<PropertyChangeType, List<T>> compareMap;

    private Integer newCollectionSize;

    private Integer oldCollectionSize;

    private Boolean diff;

    public CollectionCompareLite(Collection<N> newCollection, Collection<O> oldCollection, Function<N, T> firstField,
                                 Function<O, T> secondField) {
        compare(newCollection, oldCollection, firstField, secondField);
    }

    public CollectionCompareLite(List<N> newList, List<N> oldList) {
        compare(newList, (Collection) oldList, Function.identity(), Function.identity());
    }

    public CollectionCompareLite(Set<N> newList, Set<N> oldList) {
        compare((Collection) newList, (Collection) oldList, Function.identity(), Function.identity());
    }

    private <T> Map<Integer, List<T>> compare(Collection<N> newCollection, Collection<O> oldCollection,
                                              Function firstProp, Function secondProp) {

        Collection<T> newList = (Collection<T>) Optional.ofNullable(newCollection)
                .orElse(CollectionUtils.emptyCollection()).stream().map(firstProp).distinct()
                .collect(Collectors.toList());

        Collection<T> oldList = (Collection<T>) Optional.ofNullable(oldCollection)
                .orElse(CollectionUtils.emptyCollection()).stream().map(secondProp).distinct()
                .collect(Collectors.toList());

        setCompareCollectionSize(newList.size(), oldList.size());

        Collection<T> insert = CollectionUtils.removeAll(newList, oldList);
        Collection<T> delete = CollectionUtils.removeAll(oldList, newList);
        Collection<T> update = CollectionUtils.retainAll(newList, oldList);

        List addList = Lists.newArrayList(insert);
        List deleteList = Lists.newArrayList(delete);
        List updateList = Lists.newArrayList(update);

        compareMap = new ImmutableMap.Builder<PropertyChangeType, List<T>>().put(PropertyChangeType.ADDED, addList)
                .put(PropertyChangeType.DELETED, deleteList).put(PropertyChangeType.MODIFIED, updateList).build();

        diff();

        return (Map) compareMap;
    }

    public List<T> getAddList() {
        return getList(PropertyChangeType.ADDED);
    }

    public List<T> getUpdateList() {
        return getList(PropertyChangeType.MODIFIED);
    }

    public List<T> getDeleteList() {
        return getList(PropertyChangeType.DELETED);
    }

    private List<T> getList(PropertyChangeType propertyChangeType) {
        return Optional.ofNullable(compareMap.get(propertyChangeType)).orElse(Collections.emptyList());
    }

    private void setCompareCollectionSize(Integer sizeNew, Integer sizeOld) {
        this.newCollectionSize = sizeNew;
        this.oldCollectionSize = sizeOld;
    }

    /**
     * 比较容器元素是否发生变化
     * 
     * @return true- diff,false- nondiff
     */
    private Boolean diff() {
        if (!oldCollectionSize.equals(newCollectionSize)) {
            this.diff = true;
        } else if (CollectionUtils.isNotEmpty(getList(PropertyChangeType.ADDED))
                || CollectionUtils.isNotEmpty(getList(PropertyChangeType.DELETED))) {
            this.diff = true;
        } else if (getList(PropertyChangeType.MODIFIED).size() == newCollectionSize) {
            this.diff = false;
        }
        return diff;
    }

    public static void main(String[] args) {
        List<Integer> l1 = Lists.newArrayList(1, 2, 3);
        List<Integer> l3 = Lists.newArrayList(1, 2, 3);
        CollectionCompareLite<Integer, Integer, Integer> compareLite = new CollectionCompareLite(l1, l3);

        System.out.println(compareLite.getAddList());
        System.out.println(compareLite.getDeleteList());
        System.out.println(compareLite.getUpdateList());
        System.out.println(compareLite.diff());

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值