按照他的属性获取元素

时间:2015-03-19 09:27:00

标签: java object arraylist attributes

我需要什么:获取元素 我从类中创建了两个对象,它有两个属性: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)?

3 个答案:

答案 0 :(得分:1)

您可以使用Collections.binarySearch()和自定义Comparator

javadoc

编辑:代码段:

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);