根据属性获取元素和Arraylist - Java

时间:2018-02-22 08:28:06

标签: java arraylist

我有一个“变量”类的Arraylist。每个“变量”对象都有一个名称(String)和一个值(int)。 有没有一种有效的方法来检索ArrayList中具有特定名称的对象? 即:

ArrayList<Variable> vars = new ArrayList<Variable>();
//Fill with values here//
for (int j = 0; j < vars.size(); j++) {
    String nName = vars.get(j).getName();
    //not real code, but what I would like
    return vars.get(element.getName().equals(nName));
}

目前我正试图通过大量的for循环来实现这一点,并且看起来很难看它效率不高。 谢谢!

7 个答案:

答案 0 :(得分:2)

这应该这样做:

static Variable findVariable(List<Variable> vars, String name) {
    for (Variable var: vars) {
        if (var.getName().equals(name)) {
            return var;
        }
    }
    return null; // not found
}

答案 1 :(得分:1)

使用Java-8流:

vars.stream()
    .filter(var -> var.getName().equals(someName))
    .collect(Collectors.toList())

答案 2 :(得分:1)

也许你可以使用Java 8中的Stream来过滤你需要的元素:

Optional<Variable> optionalVariable = vars.stream().filter(element -> element.getName().equals(theNameYouWant)).findFirst();
Variable var = optionalVariable.orElseThrow(() -> new NullPointerException()); //or you use just the Optional#get method instead.

或者如果您不使用Java 8,请尝试使用

for(Variable variable : vars) {
    if(variable.getName().equals(theNameYouWant)) {
        return variable;
    }
}

答案 3 :(得分:1)

我认为这段代码可能对你有用,这里我在Arraylist中添加一个名字'idummy'的变量对象并在循环中检查它

    ArrayList<Variable> list = new ArrayList<>();
    list.add(new Variable("dummy", 1));

    for (Variable obj : list) {
        if(obj.getName().equals("dummy")) {
            return obj;
        }
    }

答案 4 :(得分:0)

我建议你使用Map,这是获取元素而不循环整个数组的最有效方法

Variable var = new Variable("name");
Map<String,Variable> vars = new HashMap<>();

vars.put(var.getName(),var);
vars.get("name");

答案 5 :(得分:0)

这没有任何意义,也无法编译:

return vars.get(element.getName().equals(nName));

element.getName().equals(nName)返回布尔值,而varsVariable的列表。

你需要的是一个带有参数的方法,该参数接受List的{​​{1}}和一个表示名称的String,并在Variable中寻找匹配:

List

并以这种方式使用它:

public Variable find(List<Variable> vars, String name){
  for (Variable variable : vars) {        
    if (name.equals(variable.getName()){
         return Optional.of(variable);
    }      
  }
  return null;
}

请注意,使用Java 8时,您无需引入执行此过滤器的方法,也可以使用List<Variable> vars = new ArrayList<>(); //Fill with values here// Variable foundVariable = find(vars, "myName"); 来阻止Optional
你可以直接做:

NullPointerException

答案 6 :(得分:-1)

稍微修改现有代码,您可以尝试:

String n = "nameYouWant";
Variable vFinder(String n) {
    for (v : vars) {
        if v.getName().equals(n) {
            return v;
        }
    }
    return NULL;
}