我有
String selectedName = "ABC";
List<object> pgetName;
其中object包含 id,name,version
等变量我想做相同的
int first = pgetName.indexOf(selectedName);
int last = pgetName.lastIndexOf(selectedName);
用于简单的String Arrays。我试过了
int first = pgetName.getProperty("name").indexOf(processToStart);
和
int first = pgetName[].getName().indexOf(processToStart);
例如,但他们不能工作。我该怎么做我想做的事?这是一个先进的Java,对我来说是一个菜鸟......
提前致谢,
答案 0 :(得分:1)
这是另一种方法(可能有点矫枉过正,但它会向您展示另一种方式)。我们的想法是覆盖indexOf和lastIndexOf方法,以便根据您的字段进行验证&#34; name&#34;:
private static class TestObject {
String id, name, version;
public TestObject(String id, String name, String version) {
super();
this.id = id;
this.name = name;
this.version = version;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getVersion() {
return version;
}
}
public static void main(String[] args) {
List<TestObject> pgetName = new ArrayList<TestObject>() {
@Override
public int indexOf(Object o) {
if (o == null || this.isEmpty()) {
return -1;
}
int counter=0;
for (TestObject current : this) {
if (o.equals(current.getName())) {
return counter;
}
counter++;
}
return -1;
}
@Override
public int lastIndexOf(Object o) {
if (o == null || this.isEmpty()) {
return -1;
}
for (int i=this.size()-1; i>=0;i--) {
TestObject current = get(i);
if (o.equals(current.getName())) {
return i;
}
}
return -1;
}
};
pgetName.add(new TestObject("1", "name1", "ver1"));
pgetName.add(new TestObject("2", "name2", "ver2"));
pgetName.add(new TestObject("3", "name3", "ver3"));
pgetName.add(new TestObject("4", "name1", "ver4"));
int first = pgetName.indexOf("name1");
int last = pgetName.lastIndexOf("name1");
System.out.println("First: " + first + " - Last: " + last);
}
结果是:
First: 0 - Last: 3
答案 1 :(得分:1)
对于任何Java对象,您可以覆盖方法equals和hashCode(这不是真正使用的,但实现两种方法通常都是一种很好的做法),以便使用java.util.List的indexOf和lastIndexOf函数。 / p>
eclipse的上下文菜单生成两种方法的默认实现,让您选择应该在哪个字段进行比较。试一试。
执行上述方法后,可以在List上使用indexOf。
答案 2 :(得分:1)
如果我理解你的问题,你想要找到一个Object的索引,其中一个Object的属性是一个特定的值&#34;。
这在Java(或大多数语言FWIW)中是不可能的。你可以通过for循环很简单地实现它,但是:
public MyObject findObjectByName(MyObject[] objects, String name) {
for (MyObject object: objects) {
if (object.name.equal(name) {
return object;
}
}
return null;
}
如果要查找索引,可以执行类似的操作:
public int findObjectIndex(MyObject[] objects, String name) {
for (int i = 0; i < objects.length; ++i)
if (objects[i].name.equal(name) {
return i;
}
}
return -1;
}
现在,这是您可以采取的最天真的方法,并且通常(但并非总是)是最好的方法。如果你有大量的对象,并且你需要按名称查找很多,那么最好建立一次索引,然后通过索引查找它们:
public class MyObjectIndex {
final Map<String, MyObject> byName = new HashMap<String, MyObject>();
public MyObjectIndex(MyObject[] objects) {
for (MyObject object: objects) {
byName.put(object.getName(), object);
}
}
public getMyObjectWithName(String name) {
return byName.get(name);
}
}