[英]Checking that a field in a List of Objects has a certain value?
我有一個Person
對象列表:
List<Person> allPersons = new ArrayList<Person>();
Person對象有一個名為Address
的field
。
我想檢查列表中至少有一個人是否有某個地址我該怎么做?
我知道在使用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.