Java集合对象比对
1. 场景描述
通过java代码从外围接口中获取数据并落地,已经存在的不落地,不存在的落地,因有部分字段变化是正常的,只需比对3个字段相同即为相同。
2. 解决方案
设置定时任务(三个标签完成springboot定时任务配置),比对接口中获取的数据和本地落地的数据是否相同。
2.1 真实代码
@Scheduled(cron = "0 10 2 * * ? ")
public void execAppUser() {
synchronized (this) {
JSONArray array = null;
try {
array = testService.getUsers();
} catch (Exception e) {
e.printStackTrace();
}
//接口获取user
List<AppUser> iusers = JSONObject.parseArray(array.toJSONString(), AppUser.class);
List<AppUser> users = appUserService.getAllUsers();
for (AppUser iuser : iusers) {
if (users.contains(iuser)){
continue;
}
appUserService.insert(iuser);
}
}
}
2.2 代码说明
(1)使用users.contains(iuser),比对目前库中是否存在从接口获取的对象。
(2)因只比对三个字段,三个字段相同即为相同,需重写AppUser对象的equals和hashcode
(3)Idea中Alt+insert快捷键调出来,选择对应的字段就能生成对应的equals和hashCode。
(4)equals代码
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AppUser appUser = (AppUser) o;
return Objects.equals(aa, appUser.aa) &&
Objects.equals(bb, appUser.bb) &&
Objects.equals(cc, appUser.cc);
}
@Override
public int hashCode() {
return Objects.hash(aa, bb, cc);
}
更多信息请关注公众号:「软件老王」,关注不迷路,IT技术与相关干货分享,回复关键字获取对应干货,本文版权归作者软件老王所有,转载需注明作者、超链接,否则保留追究法律责任的权利。