有没有什么工具类可以实现判断同类的两个对象中的值有哪些相同哪些不同,类中属性也可能是其他类也要进行判断是否相同
举例提交对比 当用户提交一次信息后不通过 第二次提交想要有对比这样的情况对比有哪些字段值不同或相同
v 站大佬帮帮忙
1 cpyhaha 2019-08-06 09:24:22 +08:00 重写 toString 和 equals 就行了 |
2 cpyhaha 2019-08-06 09:25:38 +08:00 额 你是要比对每个字段啊,那不太清楚 |
![]() | 3 crayygy 2019-08-06 09:27:04 +08:00 via Android 不就是 equals 重写一下吗?当然也可以 kotlin data class |
![]() | 4 hihipp 2019-08-06 09:27:16 +08:00 我想到的思路是用反射,获取属性值进行比较。 |
5 nihaoaa 2019-08-06 09:31:31 +08:00 只能用反射了,用反射重写下 equals 吧 |
![]() | 6 passerbytiny 2019-08-06 09:33:49 +08:00 判断小黑和小白长得一不一样,让小黑自己去判断是最直接,以及最有效的方法。 |
7 Archangell OP @cpyhaha 如果只是单类还好说 如果类中包含其他类 如何对比 |
8 Archangell OP |
9 panhongbo 2019-08-06 10:28:45 +08:00 转 json,字符串 equals |
![]() | 10 MaoMiao 2019-08-06 10:29:58 +08:00 apache commons 里有 EqualsBuilder |
11 icedir 2019-08-06 10:30:03 +08:00 楼上的方案我经常用。。 |
12 icedir 2019-08-06 10:30:25 +08:00 我说的是 9 楼的 |
13 cpyhaha 2019-08-06 10:38:50 +08:00 @Archangell #7 这样的需求我也没遇到过,坐等大佬,不过话说回来,页面不刷新的话,让前端去比较会不会方便一点 |
14 tslling 2019-08-06 10:42:57 +08:00 via Android 反射太 hack 了吧,转 json 比字符串更 hack。重写 equals 是标准做法,属性是对象再递归调用它的 equals,用 apache commons 的辅助方法吧。重写 equals 别忘了重写 hashCode。。。 |
![]() | 15 Sapp 2019-08-06 10:46:24 +08:00 这个提示给前端其实比较好做,只需要吧上一次的保留下来,这次点提交的时候判断一下就行了,比如 react 可以这么干 {xx[key] === oo[key] ? null : <p>* 字段不同</p>} 就这一行代码就可以完成你说的提交的时候对比操作了,如果你要对比的这个字段可能是个对象之类的东西,前端也有 lodash 方法可以直接完成对比 |
![]() | 16 Cstone 2019-08-06 10:48:11 +08:00 |
![]() | 17 Cstone 2019-08-06 10:53:03 +08:00 补充:支持你要的递归对比 |
![]() | 18 champloo 2019-08-06 11:00:31 +08:00 via Android 重写 equels 方法,在 equels 里调用其他对象的 equels 方法,在比较的同时,用数组装数据类型的字符串 |
19 Archangell OP 感谢大家啦 刚刚找到一个比较靠谱的推荐给大家 https://blog.csdn.net/dadiyang/article/details/88782898 亲测简单类很满足 复杂类的话支持重写对比方法 目前还没来得及写 |
20 Archangell OP @panhongbo 是个好办法 但是如何对比出不同值的字段呀 |
21 Archangell OP @Sapp 嗯 不过情况稍微不同 需要后端来判断两个对象有那些个字段值不同 业务现在是这样的 有些值不同无所谓 有些值做改动了 就需要重新提交审核 目前就是需要后端来判断那几个关键字段的值是否改动 在做后续处理 |
22 Archangell OP @Cstone 牛逼老铁 这就是我苦苦追寻的 666 https://javers.org/ 好东西 |