我在java上有一个List。我的班级有字段,其中一个是:name
。让我们假设:
List<MyClass> mylist = new ArrayList<MyClass>();
MyClass myElement = new MyClass();
myElement.setName("xxx");
那么如何检查List中是否包含与myElement
变量同名的元素并检索该变量?
答案 0 :(得分:3)
如果您的MyClass
实施equals()
的方式使两个MyClass
实例相同,如果它们具有相同的名称,那么您可以这样做:
int index = mylist.indexOf(myElement);
MyClass myListElement = mylist.get(index);
不幸的是,equal()
/ Collection
API中没有“获取List
此方法的元素,可以在更有效率的方式。
如果您 没有<{1}}实施(或者由于某种原因想要),那么您将不得不这样做这是一种无聊,老式的方式:
equals()
答案 1 :(得分:2)
如果使用Apache CollectionUtils是一个选项,find
方法就是这样做的:
CollectionUtils.find(myList, new Predicate(){
public boolean evaluate(Object o){
return name.equals(((MyClass) o).getName());
}
})
答案 2 :(得分:0)
如果equals()
字段相等(字符串MyClass
),则覆盖true
的{{1}}方法以返回name
。
答案 3 :(得分:0)
内置任何内容,您必须手动执行此操作:
MyClass findByNameOrNull(List<MyClass> list, String name) {
for(MyClass myClass: list)
if(myClass.getName().equals(name))
return myClass;
return null
}
这是支持lambdas的问题之一(在Scala中):
mylist.find(_.name == "xxx")
答案 4 :(得分:0)
您应该覆盖equals方法以使用name来比较相等性。您应该在覆盖hashCode()
,read here的任何时候覆盖equals()
。
您可以使用indexOf()
检查是否有与给定元素匹配的元素。它使用equals()
:
以下是yourlist.indexOf(o)
确定匹配的方式:
(o==null ? get(i)==null : o.equals(get(i)))
然后,您可以对找到的索引(i)执行l.get(i)
。