gpt4 book ai didi

java - 如何有效地比较同一类的两个对象并检查哪些字段不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:19 26 4
gpt4 key购买 nike

我想编写一个通用函数,它接受同一实体类的两个对象并比较不同的字段并返回对特定字段所做的所有更改的列表以及时间。

许多实体类中的一个可以说是 Member 如下

public class Member {
String firstName;
String lastName;
String driverLicenseNumber;
Integer age;
LocalDateTime timestamp;
}

在数据库中,我有一个名为 member_audit 的表,只要使用触发器(与其他实体类似)在成员表中发生更改时,该表就会填充旧数据。

我要返回的每个实体的资源列表类似于

public class MemberAuditsResource {
private String field;
private LocalDateTime on;
private String changeType;
private String oldValue;
private String newValue;
}

只能想到像这样分别为每个实体写一个函数

private List<MembeAuditsResource> memberCompare(Member obj1, Member obj2) {

//Compare every field in both the objects using if else and populate the resource.

}

然后调用上面的函数比较entity_audit表中的每一对记录。代码会非常大,无法比较每个字段并乘以不同的实体。有没有更好更高效的方法?

最佳答案

如果将思路扩展到比较对象图,就不是小问题了。因此,有效的方法不是重新发明轮子,而是使用现有的库,例如 JaVers :

Member oldMember = new Member("foo" ,"chan" ,"AB12" , 21 ,LocalDateTime.now());
Member newMember = new Member("bar" ,"chan" ,"AB12" , 22 ,LocalDateTime.now());

Diff diff = javers.compare(oldMember, newMember);
for(Change change: diff.getChanges()) {
System.out.println(change);
}

然后,你可以得到类似的东西:

ValueChange{ 'firstName' changed from 'foo' to 'bar' }
ValueChange{ 'age' changed from '21' to '22' }

关于java - 如何有效地比较同一类的两个对象并检查哪些字段不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com