我有一个Person
对象列表:
List<Person> allPersons = new ArrayList<Person>();
Person对象的field
名为Address
。
我想检查列表中至少有一个人员是否有某个地址 我怎么能这样做?
我知道在使用HashMap时有一个.containsValue()方法,但ArrayList
是否有类似内容?
修改:请注意我在每个对象中搜索特定的字段值,不对象本身?
答案 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之前做的事情。