我有一个对象类型列表。在那里我有一个String属性idNum。现在我想通过传递idNum来获取列表中对象的索引。
List<Object1> objList=new ArrayList<Object1>();
我不知道如何提供objList.indexOf(// Don't know how to give here);
是否可以在不重复列表的情况下执行此操作。我只想使用indexOf()
方法。
答案 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);
}
});