对比两个相同实体类的全部属性

1. 对比两个相同实体类的全部属性, 实体类:individual

List<Individual> individuals = new ArrayList<Indivdual>();
individuals.add(ind1);
individuals.add(ind2);

2. 以一个属性为例,假设这个属性是“姓名”,如果ind1,ind2两个实体“姓名”都有值,则获取ind1里的姓名;如果一个有值,一个空值,则获取有值的那个姓名; 有什么方法可以实现么

1、如果是要比较两个实体的全部属性是否都一样,可以在实体类里面重写equals方法

2、写个方法,if-else判断下就可以实现

可以使用反射机制获取属性和属性值,然后进行比较,最后赋值

 public static void main(String[] args) {
        User one = new User();
        one.setId("1");
        one.setName("张三");
        User two = new User();
        two.setMobile("12345678911");
        User mergeUser = new User();
        mergeObject(mergeUser, Lists.newArrayList(one, two));
        System.out.println("id:" + mergeUser.getId() + " name:" + mergeUser.getName() + " mobile:" + mergeUser.getMobile());
    }

    private static void mergeObject(Object obj, List<Object> objectList) {
        Method[] methods = obj.getClass().getMethods();
        Map<String, List<Method>> propertyMethodListMap = Maps.newHashMap();
        for (Method method : methods) {
            if (!method.getName().startsWith("get") && !method.getName().startsWith("set")) {
                continue;
            }
            String name = method.getName();
            name = name.substring(3);
            List<Method> methodList = propertyMethodListMap.get(name);
            if (methodList == null) {
                methodList = new ArrayList<>(2);
                propertyMethodListMap.put(name, methodList);
            }
            methodList.add(method);
        }
        if (propertyMethodListMap.isEmpty()) {
            return;
        }
        propertyMethodListMap.forEach((property, methodList) -> {
            Method setMethod = null;
            Method getMethod = null;
            for (Method method : methodList) {
                if (method.getName().startsWith("set")) {
                    setMethod = method;
                } else {
                    getMethod = method;
                }
            }
            if (setMethod == null || getMethod == null) {
                return;
            }
            try {
                setMethod.invoke(obj, Optional.ofNullable(getMethod.invoke(objectList.get(0))).orElse(getMethod.invoke(objectList.get(1))));
            } catch (IllegalAccessException | InvocationTargetException e) {
            }
        });
    }