使用java中包含的对象的属性获取arraylist的索引

时间:2013-12-30 09:02:05

标签: java generics collections arraylist

我有一个对象类型列表。在那里我有一个String属性idNum。现在我想通过传递idNum来获取列表中对象的索引。

List<Object1> objList=new ArrayList<Object1>();

我不知道如何提供objList.indexOf(// Don't know how to give here);

是否可以在不重复列表的情况下执行此操作。我只想使用indexOf()方法。

3 个答案:

答案 0 :(得分:6)

写一个小帮手方法。

 private int getIndexByProperty(String yourString) {
        for (int i = 0; i < objList.size(); i++) {
            if (object1 !=null && object1.getIdNum().equals(yourString)) {
                return i;
            }
        }
        return -1;// not there is list
    }

如果没有找到,请不要忘记返回-1。

答案 1 :(得分:2)

您无法使用indexOf执行此操作。相反,列表中的所有对象都应该从公共接口继承 - 例如

interface HasIdNum {
    String getIdNum();
}

现在你的列表可以是List<HasIdNum>,你可以通过id循环查找对象:

for (HasIdNum hid: objList) {
   if (hid.getIdNum().equals(idNumToFind) {
       return hid;
   }
}
return null;

获取索引而不是对象:

for (int i=0;i<objList.size();i++) {
   HasIdNum hid = objList.get(i);
   if (hid.getIdNum().equals(idNumToFind) {
       return i;
   }
}
return -1;

或者你可以使用反射来查询对象的方法,但是当你丢失所有的编译时类型检查时,这会慢很多,而且安全性会低得多。

答案 2 :(得分:2)

基于idNum字段在Object1类中实现equals(和hashCode),然后像这样使用List.indexOf

int i = objList.indexOf(new Object(idNum));

或制作一个特殊的课程

    final String idNum = "1";
    int i = list.indexOf(new Object() {
        public boolean equals(Object obj) {
            return ((X)obj).idNum.equals(idNum);
        }
    });