Java列表不包含对象

时间:2018-10-23 09:13:04

标签: java list

我有一个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);
        }
    }
}

谢谢。

1 个答案:

答案 0 :(得分:1)

由于您要在循环中处理创建的内容,因此您的尝试将失败,因此最终您将在其中添加几个人。

只需按照您描述的方式编写即可:

if (allPersons.isEmpty() || !allPersons.contains(person))
  allPersons.add(person)

现在,为了使它起作用,您必须问自己一个重要问题:“同一个人”的确切含义是什么?

您用相同的名字/姓氏描述了它,因此请确保您的equalshashcode方法是这样实现的。可能只是一个简化,但是规则仍然适用。在描述一个实体时,总是要用什么来唯一地标识那个实体,并用它来实现equalshashcode

第二,由于allPersons不可能两次包含同一个人,因此它是Set,而不是List。在这种情况下,您甚至可以放弃支票,因为该套票将自动确保仅提供一份。

第三,检查空度是多余的。显然,如果为空,contains始终为false。