【发布时间】:2020-04-10 02:46:37
【问题描述】:
我想断言同一类型的两个对象列表通过该对象的属性值是相同的。例如,我有两个 Person 对象列表,它们具有名字、姓氏和中间名属性。每个 Person 对象都有这些属性(java bean)的方法 setter 和 getter,构造函数不包含参数。
在这里假设我已经有一个名为existingPersonList 的两个人的列表,它具有以下属性:
现有人员 1:firstName = Bob,lastName = Smith
现有人员 2:firstName = Sue,middleName = K.,lastName = White
我想比较对象,所以我采取的方法是创建新的对象进行比较:
Person person1 = new Person();
Person person2 = new Person();
List<Person> personList = new ArrayList<>();
person1.setFirstName("Bob");
person1.setLastName("Smith");
person2.setFirstName("Sue");
person2.setMiddleName("K.");
person2.setLastName("White");
personList.add(person1);
personList.add(person2);
我目前正在做的是使用 for 循环遍历两个列表并使用 Hamcrest 方法 samePropertyValue(personList.get(i)).matches(existingPersonList.get(j)) 来查找匹配项和 assertTrue,但是这对于大型列表非常低效。
有没有更好的方法来做到这一点?或者至少直接比较两个列表而不是遍历?
【问题讨论】:
-
什么是“直接比较”,而不是遍历它们?
-
Person implements Comparable<Person>或覆盖Object.equals(Object anObject) -
直接比较,确保第一个列表中每个对象的对象属性与第二个列表中某些对象的对象属性匹配。我考虑过覆盖等于,但想知道是否有工具可以“直接”执行此操作