2016-10-21 3 views
0

я использую этот код, чтобы проверить, если объект уже находится в спискеИсключить некоторые свойства при поиске объекта в списке

myClientList.contains(client); 

Я хочу, чтобы исключить некоторые свойства при проверке в клиенте есть в списке, таких как adress, age ... и просто проверьте firstName, lastName и возраст. Есть ли возможность сделать это при использовании myClientList.contains, или я должен написать свою собственную функцию для этого?

+0

'myClientList.contains (client);' полагается на реализацию метода 'equals'. вы должны реализовать это соответственно, если это соответствует _общему равенству_ ваших объектов _client_. (тогда не забывайте «hashcode»), иначе, если вам нужно только определение равенства для somehow_temporary_, вы должны использовать какую-то фильтрацию. –

+0

'contains' работает с' equals'. Вы можете переопределить 'equals' в классе клиента и проверить только определенные поля. В качестве альтернативы, перейдите в список и проверьте вручную. – khelwood

ответ

0

Метод contains основан на equals методе вашего Client класса, так что вы должны ovveride метод equals, чтобы удовлетворить вам нужно, делать, как парень:

@Override 
public boolean equals(Object object){ 
    if(object == null) 
     return false; 

    else if(!(object instanceof Client)) 
     return false; 

    else { 
     Client client = (Client)object; 

     if(firstName.equals(client.getFirstName()) && 
       lastName.equals(client.getLastName() && 
       age.equals(client.getAge())) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

В противном случае вы можете проверить эти атрибуты вручную в то время как итерация.

1

Что @El Сэм ответ в порядке, но это не хорошо для реального слова, потому что может быть два лица, имеющие один и тот же ПгвЬЫате, LastName, и возраст так, используя РАВНО/хэш-код не является хорошим выбором.

Для вашего случая. Лучше писать свою собственную функцию. Просто напишите цикл и проверьте условие.

Если вы используете Java 8, вы можете использовать выражение Lambda.

myClientList.stream().anyMatch(r -> 

     r.getFirstName().equals(client.getFirstName()) && 
     r.getLastName().equals(client.getLastName()) && 
     r.getAge() == client.getAge() 
    ); 
0

Из содержит возвращающие вы можете перебирать коллекцию и найти этот объект и исключить свойства

0

java.util.List.contains(Object o) основывается на равенстве объектов в срок Object.equals(Object o) метода. У этого есть сильная семантика.

Зная, имеет ли объект какие-либо свойства, равные с другим объектом, такие как имя и фамилия, не должны иметь отношения к методу equals, потому что это не имеет значения для идентификации клиента (этого недостаточно, как упоминал @Loc) , Это скорее метод поиска с некоторыми критериями.

Итак, на вашем месте я создам службу для выполнения операций поиска на клиентах или создаю свой собственный список, который реализует List, но который также предоставляет метод поиска, который соответствует моим потребностям.

Смежные вопросы