前言:
集合A=[1,2,3,4,5],B=[2,3,4,5,6],查找出集合A中存在而B中不存在的数据/找出集合A中不存在而B中存在的数据
1、通用代码
/**
* 比较两个集合,获取需要增加的集合列表
* 目标集合【历史数据】中没有源集合【新数据】中的数据时,需新增
* orginList存在而targetList不存在的数据
* @param orginList
* @param targetList
* @param <E>
* @return
*/
private <E> List<E> getInsertList(List<E> orginList,List<E> targetList){
List<E> insertList = new ArrayList<>();
orginList.stream().forEach(o ->{
if (!isContain(targetList,o)){
insertList.add(o);
}
});
return insertList;
}
/**
* 比较两个集合,获取需要删除的集合列表
* 源集合【新数据】中没有目标集合【历史数据】中的数据时,需从【历史数据】中删除
* orginList不存在而targetList中存在的数据
* @param orginList
* @param targetList
* @param <E>
* @return
*/
private <E> List<E> getDeleteList(List<E> orginList,List<E> targetList){
List<E> deleteList = new ArrayList<>();
targetList.stream().forEach( t ->{
if (!isContain(orginList,t)){
deleteList.add(t);
}
});
return deleteList;
}
/**
* 判断集合中是否包含某元素
* @param list 元素列表
* @param t 待判断的元素
* @param <E>
* @return 包含为true,不包含为false
*/
private <E> boolean isContain(List<E> list, E t){
AtomicBoolean flag = new AtomicBoolean(false);
if (CollectionUtils.isEmpty(list) || ObjectUtils.isEmpty(t)){
flag.set(false);
}
list.stream().forEach(i ->{
if (i.equals(t)){
flag.set(true);
}
});
return flag.get();
}
2、测试
public static void main(String[] args) {
List<Integer> A = Arrays.asList(1,2,3,4,5);
List<Integer> B = Arrays.asList(2,3,4,5,6);
System.out.println("A中存在B中不存在的数据:"+getInsertList(A,B));
System.out.println("A中不存在B中存在的数据:"+getDeleteList(A,B));
}