列表中存在具有相同名称的元素

时间:2011-10-28 08:33:36

标签: java collections contains

我在java上有一个List。我的班级有字段,其中一个是:name。让我们假设:

List<MyClass> mylist = new ArrayList<MyClass>();
MyClass myElement = new MyClass();
myElement.setName("xxx");

那么如何检查List中是否包含与myElement变量同名的元素并检索该变量?

5 个答案:

答案 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)

  1. 您应该覆盖equals方法以使用name来比较相等性。您应该在覆盖hashCode()read here的任何时候覆盖equals()

  2. 您可以使用indexOf()检查是否有与给定元素匹配的元素。它使用equals()

  3. 以下是yourlist.indexOf(o)确定匹配的方式:

    (o==null ? get(i)==null : o.equals(get(i)))
    

    然后,您可以对找到的索引(i)执行l.get(i)