我需要什么:获取元素 我从类中创建了两个对象,它有两个属性:id和name。 创建对象后,我将其设置为ID并将对象添加到ArrayList:
Variable variable1 = new Variable();
variable1.setID(1);
Variable variable2 = new Variable();
variable1.setID(2);
ArrayList<Variable> varList = new ArrayList<Variable>();
varList.add(variable1);
varList.add(variable2);
然后在我的代码中我想得到ID == 1的Element,但是我没有找到一个方法可以通过赋予Object属性来返回Object。
是否有这样的方法:对象o = getObjectByAttribute(Object.id == 1)?
答案 0 :(得分:1)
您可以使用Collections.binarySearch()
和自定义Comparator
编辑:代码段:
Comparator<Variable> comparator = new Comparator<Variable>() {
public int compare(Variable o1, Variable o2) {
return Integer.compare(o1.getID(), o2.getID());
}
};
Collections.sort(varList, comparator);
Variable key = new Variable();
key.setID(1);
int index = Collections.binarySearch(varList, key, comparator);
答案 1 :(得分:1)
如果您使用的是java8,则过滤器(在lambda表达式中)是一个不错的选择。
Stream<Variable> outputList = varList.stream().filter(val -> val.getId() ==1);
outputList将只包含带有Id 1的Variable对象。如果该列表不为空,则可以从该列表中获取第一个元素。
价: http://zeroturnaround.com/rebellabs/java-8-explained-applying-lambdas-to-java-collections/
答案 2 :(得分:1)
有这样的方法:对象o = getObjectByAttribute(Object.id == 1)?
不,但创建一个很容易。创建一个接口Function
,它从类型为T的Object中提供类型为U的属性。
interface Function<T, U> {
U apply(T t);
}
然后方法:
public static <T, U> T getObjectByAttribute(List<T> objects, Function<T, U> fromAttribute, U attributeResearched) {
for(T obj : objects) {
if(fromAttribute.apply(obj).equals(attributeResearched)) {
return obj;
}
}
return null;
}
以及如何调用它:
Variable v = getObjectByAttribute(varList, new Function<Variable, Integer>() {
@Override
public Integer apply(Variable variable) {
return variable.id;
}
}, 1);