java 批量数据校验

最近有个场景就是,要对一批数据进行修改, 然后有一些key组成条件后是一对一的,要先从数据库中查出一个项目的全部数据,再根据那些条件 一一比较,我觉得不是很好,就给优化了一下.

原代码


public static void main(String[] args) {
	User result;
	//从前端获取一批数据 reqList 手动填充模拟一下
	List<User> reqList = new ArrayList();
	reqList.add(new User().setName("王小明").setAge(13).setAddress("校门口12号楼102室"));
	reqList.add(new User().setName("王小明").setAge(14).setAddress("校门口12号楼103室"));
	reqList.add(new User().setName("猪小明").setAge(15).setAddress("校门口12号楼104室"));
	//就是先数据库 查出来一批数据 poList
	for(User req: reqList ){
		List<User> poList=userDao.list();
		for(User po : poList){
			if(po.getName().equals(req.getName())&&
				po.getAge().equals(req.getAge())&&
				po.getAddress().equals(req.getAddress())
			){
				result = po;
				//匹配中的干点什么 这样每次匹配都得两个大循环
				sout(result);
			}
		}
	}

//然后遍历reqList 一个个拿key 再去跟poList里面遍历比较 且是一个一个key的比较 
}

优化后

	public final static String USER_KEY_LENGTH = 3;
	//先写个拼接这些key的方法
     public static String joinUserKey(User user){
        return joinKey(USER_KEY_LENGTH ,user.getName(),user.getAge(),user.getAddress());
    }

	//整理了一个可复用的方法 可以放到工具类里,而且有一些情况是 还要另外处理入参 不会原原本本的调用上面那样一个User类
    public static String joinKey(Integer argsLength,String... args){
        Assert.isTrue(argsLength==args.length,"参数长度与期望值不匹配");
        StringJoiner stringJoiner = new StringJoiner(",");
        for (String arg : args) {
            stringJoiner.add(arg);
        }
        return stringJoiner.toString();
    }
    
	public static void main(String[] args) {
		List<User> reqList = new ArrayList();
		reqList.add(new User().setName("王小明").setAge(13).setAddress("校门口12号楼102室"));
		reqList.add(new User().setName("王小明").setAge(14).setAddress("校门口12号楼103室"));
		reqList.add(new User().setName("猪小明").setAge(15).setAddress("校门口12号楼104室"));
		//将这些一条条的属性拼接成一个大key, 然后value是对象
		List<User> poList=userDao.list();
        Map<String, User > userMap = poList.stream()
        	.collect(Collectors.toMap(this::joinUserKey, user-> user));
		for(User req: reqList ){
			//比较的时候 直接把req的各个key拼接成大key来取即可
			User user= userMap.get(this.joinKey(req);
			//然后判断这个是否为空即可,主要是这里需要用到这个对象,
			if(user != null ){
				sout(user)
			}
			否则直接判断是否有这个key即可
			userMap .containsKey(this.joinKey(req));
		}
	}
       
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值