淅沥沥~哗啦啦~
2021-01-06 16:06
采纳率: 33.3%
浏览 221
已采纳

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

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • qq_25376897 2021-01-06 16:21
    已采纳

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

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

    点赞 打赏 评论
  • 风丶飞 2021-01-06 17:11

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

    点赞 打赏 评论
  • 编程爱好者熊浪 2021-01-06 18:42
     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) {
                }
            });
        }
    点赞 打赏 评论
  • 编程爱好者熊浪 2021-01-06 18:42

     

    点赞 打赏 评论

相关推荐 更多相似问题