检查对象列表中的字段是否具有特定值?

时间:2016-03-23 13:07:50

标签: java arraylist collections hashmap contains

我有一个Person对象列表:

List<Person> allPersons = new ArrayList<Person>();

Person对象的field名为Address

我想检查列表中至少有一个人员是否有某个地址 我怎么能这样做?

我知道在使用HashMap时有一个.containsValue()方法,但ArrayList是否有类似内容?

修改:请注意我在每个对象中搜索特定的字段值对象本身?

5 个答案:

答案 0 :(得分:6)

你必须以这种或那种方式迭代List。

一种方便的方法是使用Java8 Streams:

boolean found = allPersons.stream().anyMatch(p->p.getAddress().equals(someAddress));

答案 1 :(得分:3)

您可以使用Eclipse Collections中的asLazy()collect()

如果您可以使用MutableList界面:

MutableList<Person> allPersons = Lists.mutable.empty();
boolean found =
    allPersons.asLazy().collect(Person::getAddress).contains(someAddress);

如果您无法从List更改allPersons的类型:

List<Person> allPersons = new ArrayList<>();
boolean found = 
    LazyIterate.collect(allPersons, Person::getAddress).contains(someAddress);

注意:我是Eclipse Collections的撰稿人。

答案 2 :(得分:2)

如果您打算经常进行此项检查,请在Set<String>中加载地址,然后您可以调用contains方法:

Set<String> allAddresses = 
   allPersons.stream().map(Person::getAddress).collect(toSet());
// ...
boolean found = allAddresses.contains(someAddress);

答案 3 :(得分:-1)

你可以简单地做+迭代器循环

boolean found = false;
Iterator it = allPersons.iterator();
Person currentPerson = null;

while(!found && it.hasNext()){
    currentPerson = it.next();
    if(currentPerson != null && paramAdress.equals(person.getAddress()){
        found = true;
    }
}

答案 4 :(得分:-2)

作为补充,如果您对Eran的答案感到不舒服(这是最好的答案)或者您不能使用Java 8,只需创建一个方法:

public boolean checkAdress(String adress)
{
    boolean found = false;
    for(int i = 0; i < allPersons.size() && !found; i++)
        found = allPersons.get(i).getAdress().equals(adress);
    return found;
}

这是我以前在Java 8之前做的事情。