我有一个“变量”类的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循环来实现这一点,并且看起来很难看它效率不高。 谢谢!
答案 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)
返回布尔值,而vars
是Variable
的列表。
你需要的是一个带有参数的方法,该参数接受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;
}