两个List<T>对象做对比

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上就可以了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值