版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36688143/article/details/88413770
需求
比较两个List<T>对象的多个字段,或者说这多个数据库字段构成了唯一索引,不能使用for(效率低)
思路
重写map的get/set,并新建T对象的model类,用于进行其它操作(一般不会在原entity操作,影响比较大)
解法
自定义一个map<String,model>,重写get/put,把T里面的字段作为一个自定义的key。这个model是T对象的model类,对应实体类
public class EntityMap {
private Map<String, EntityModel> data = new HashMap<>();
public EntityModel get(String No, Date Date, String planD, String planA) {
String key = generateUniqueIdentify(No, Date, planD, planA);
return data.get(key);
}
public EntityModel put(String No, Date Date, String planD, String planA,
EntityModel value) {
String key = generateUniqueIdentify(No, Date, planD, planA);
return data.put(key, value);
}
private String generateUniqueIdentify(String No, Date Date, String planD, String planA) {
// 这种简单场景,java会自动转换成stringbuilder
return No + "-" + Date + "-" + planD + "-" + planA;
}
}
然后把一个List<T>转为map,使用put方法保存
List<Entity> A;
List<Entity> B;
EntityMap map = new EntityMap();
for (Entity entityA : A) {
map.put(entityA .getNo(), entityA .getDate(), entityA .getPlanD(),
entityA .getPlanAt(), new EntityModel() {
{
setNo(entityA .getNo());
setDate(entityA .getDate());
setPlanD(entityA .getPlanD());
setPlanA(entityA .getPlanA());
}
});
}
最后加一个for遍历另一个List<T>,使用get进行比较
for (Entity entity : B) {
EntityModel entitycModel = map.get(entity .getNo(), entity .getDate(),
entity .getPlanD), entity .getPlanA());
if (entitycModel != null) {
// 说明另一个List的entity数据库里有这条记录
}
} else {
// 说明另一个List的entity里没有这条记录
}
}