1、思路
两个集合对象对比数据,找出缺少的,多余的,和不同的数据。前提下是两个对象是同一个对象才可以对比,这样比较方便。如果是两个不同的对象,需要先转化成一样的对象再进行对比。其他的list有自带的系统方法,但是不满足此时的业务需求。就暂时不考虑。这里也是之前又看到别人写的用的map 通过关键字key做的对比。我就在这里再次记录一遍。
2.代码实现
//这里是两个相同的对象,不同的话,自己转化就好
List<Student> a = new ArrayList<Student>();
List<Student> b = new ArrayList<Student>();
//把list对象转换成map
public Map<String,List<Student>> createMap(List<Student> list){
Map<String,List<Student>> = new HashMap<String,Student>();
for(Student stu : list){
String key = "";
//我们这里就用student主键字段作为key值
String stuId = stu.getStuId();
if(null !=stuId && !"".eques(stuId)){
key+=stuId;
}
map.put(key,stu);
}
return map;
}
//通过对比key来获取多余的值,或者缺少的值。
public List<Student> getDiffList (Map<String ,List<Student>> saMap,Map<String ,List<Student>> sbMap){
List<Student> stuList = new ArrayList<Student>();
//遍历Map
for(Map.Entry<String,List<student>> entry : saMap.entrtSet()){
String key = entry.getKey();
//判断另一个map是否包含这个key
如果有则是相同数据,如果没有,那就是不同的数据
if(!sbMap.containsKey(key)){
stuList.add(saMap.get(key))
}
}
}
public Map<String,List<Student>> get ResultMap(List<Student> a,List<Student> b){
Map<String,List<Student>> map = new HashMap<String,List<Student>>();
Map<String,List<Student>> map1 = createMap(a);
Map<String,List<Student>> map2 = createMap(b);
List<Student> list1 = getDisffList(a,b);//差集
List<Student> list2 = getDisffList(b,a);//增集
map.put("saveList",list1);
map.put("deleteList",list2);
return map;
}
不同的数据就在 就是在 创建map方法,那里把要判断是否重复的字段值都拼接到 key上就可以了。