我有一个Person类,其属性ID,名字,姓氏
List<Person> allPersons; // list of existant persons from database
List<Person> persons; // list of persons for treatement
执行此操作的最佳方法是什么: 如果allPersons为空或夫妇(person.getFirstname,person.getLastname)不在allPersons中,则创建(person)
我尝试这样的事情:
List<Person> personsToCreate = new ArrayList<>();
if (allPersons.isEmpty()) {
personsToCreate = persons;
}
for (Person person : allPersons) {
for (Person personToTreat : persons) {
if (!(person.getFirstName().equals(personToTreat.getFirstName()) && person.getLastName().equals(personToTreat.getLastName()))) {
personsToCreate.add(personToTreat);
}
}
}
谢谢。
答案 0 :(得分:1)
由于您要在循环中处理创建的内容,因此您的尝试将失败,因此最终您将在其中添加几个人。
只需按照您描述的方式编写即可:
if (allPersons.isEmpty() || !allPersons.contains(person))
allPersons.add(person)
现在,为了使它起作用,您必须问自己一个重要问题:“同一个人”的确切含义是什么?
您用相同的名字/姓氏描述了它,因此请确保您的equals
和hashcode
方法是这样实现的。可能只是一个简化,但是规则仍然适用。在描述一个实体时,总是要用什么来唯一地标识那个实体,并用它来实现equals
和hashcode
。
第二,由于allPersons
不可能两次包含同一个人,因此它是Set
,而不是List
。在这种情况下,您甚至可以放弃支票,因为该套票将自动确保仅提供一份。
第三,检查空度是多余的。显然,如果为空,contains始终为false。