public <P, T> List<String> deleteBatch(List<P> params, Function<P, String> paramsComparator, Function<T, String> comparator, List<T> oldLevelList) { List<String> deleteList = new ArrayList<>(); if (Func.isEmpty(oldLevelList)) { return deleteList; } deleteList = mapFunction(oldLevelList, comparator); List<String> newTagIdList = params.stream().map(paramsComparator).filter(e -> Func.isNotEmpty(e)).collect(Collectors.toList()); deleteList.removeAll(newTagIdList); if (Func.isNotEmpty(deleteList)) { this.getBaseMapper().deleteBatchIds(deleteList); } return deleteList; } public <T> List<String> mapFunction(List<T> tList, Function<T, String> comparator) { return tList.stream().map(comparator).collect(Collectors.toList()); } @Override public Boolean updateBatch(List<EvalConfigLevelApiParam> params, String configId) { if (Func.isEmpty(params)) { return deleteByConfigId(configId); } List<EvalConfigLevel> oldLevelList = this.findLevelsByConfigId(configId); List<String> deleteList = deleteBatch(params, EvalConfigLevelApiParam::getConfigId, EvalConfigLevel::getId, oldLevelList); List<EvalConfigLevel> tags = convertToEvalConfigTagList(params, configId, deleteList); return this.saveOrUpdateBatch(tags); }