比较两个List对象,拒绝嵌套for,重写map的get/set:用于多个字段组成唯一索引的判断

版权声明:本文为博主原创文章,未经博主允许不得转载。 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里没有这条记录
                
            }

        }

 

 

猜你喜欢

转载自blog.csdn.net/qq_36688143/article/details/88413770