Bootstrap

将前端传过来的明细与旧明细进行判断,获取新增、修改、删除的明细


 

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


    

;