我有一个对象的 Vector
,并且必须在内部搜索这些对象的随机属性(例如,Plane
类、Vector
包含 Plane
;有时我必须搜索 destination
,其他则搜索 pilotName
)。
我知道我可以使用 Iterator
遍历 Vector
,但我一直不知道如何更改 String 和属性之间的比较目的。我想过使用 switch
,但另一种意见会很酷。
更新1:
我编写的代码是这样的(Java n00b 警报!):
public int search(String whatSearch, String query){
int place = -1;
boolean found = false;
for ( Iterator<Plane> iteraPlane = this.planes.iterator(); iteraPlane.hasNext() && found == false; ) {
Plane temp = (Plane) iteraPlane.next();
/* Here is where I have to search for one of many attributes (delimited by whatSearch */
}
return place;
}
看来我必须坚持线性搜索(这是我能够付出的代价)。不管怎样,我在想 Java 是否有类似变量变量名(哎哟!)
最佳答案
我假设您的问题是您想要一种根据集合类型的某些属性搜索结果的方法。 Java 在这方面比较弱,因为它最好用具有闭包的语言来表达。你需要的是这样的:
public interface Predicate<T> {
public boolean evaluate(T t);
}
然后你的搜索方法如下所示:
public static <T> T findFirst(List<T> l, Predicate<T> p) { //use List, not Vector
for (T t : l) { if (p.evaluate(t)) return t; }
return null;
}
那么任何人都可以使用这个通用搜索方法。例如,要在Integer
vector 中搜索数字:
List<Integer> is = ...
findFirst(is, new Predicate<Integer> {
public boolean evaluate(Integer i) { return i % 2 == 0; }
});
但是您可以按照您想要的任何方式实现谓词;对于任意搜索
关于java - 在 Java 上搜索 Vector 内的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1055714/