簡體   English   中英

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

[英]Checking that a field in a List of Objects has a certain value?

我有一個Person對象列表:

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

Person對象有一個名為Addressfield

我想檢查列表中至少有一個人是否有某個地址我該怎么做?

我知道在使用HashMap時有一個.containsValue()方法,但是對於ArrayList有什么類似的東西嗎?

編輯:請注意我在每個對象中搜索特定的字段值而不是對象本身?

您必須以某種方式迭代List。

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

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

您可以使用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的貢獻者。

如果您打算經常進行此檢查,請在Set<String>加載地址,然后可以在其中調用contains方法:

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

你可以簡單地做+迭代器循環

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;
    }
}

作為補充,如果您對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之前做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM