【发布时间】:2016-04-26 20:17:15
【问题描述】:
我的 myArrayList 中已经有值。对于此示例,假设其中只有两个元素(名字和姓氏)。我需要从 myArrayList 中获取值并将它们与 String 进行比较,如果匹配,则从 bean 中获取值并将其放入 map:
Map<String,String> myMap;
for(String element: myArrayList){
if(element.equalsIgnoreCase("firstName")){
myMap.put("firstName", bean.getFirstName());
}else if(element.equalsIgnoreCase("lastName")){
myMap.put("lastName", bean.getLastName());
}
}
问题是当你在 myArrayList 中有三十四十个元素时,你会遇到性能问题(我假设),而且感觉不对。
我试过了:
String name = null;
String value = null;
for(int i = 0; i < myArrayList.size(); i++){
name = myArrayList.get(i);
value = bean.get(name);
myMap.put(name, value);
}
但是“value = bean.get(name);”这一行就是说 bean 类中的 get(String) 方法是未定义的,实际上我们在 bean 类中没有这样的方法,它只有标准的 getter 和 setter 方法:
public class Bean implements Serializable {
private String firstName;
private String lastName;
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
现在我正在考虑如何提出一些设计模式来优化我的逻辑并且不影响代码的性能。请随时提出问题,如果您需要更多信息,我会编辑。任何帮助是极大的赞赏。谢谢。
编辑:shmosel 的回答对我来说非常好,谢谢大家的帮助!干杯!
【问题讨论】:
-
30-40 个元素不会从优化中看到太多改进,但 1000 个元素会。 (如果它意味着更优雅的代码,优化仍然很好)
-
您似乎正在尝试使用反射来获取 bean 属性。您可能会参考stackoverflow.com/questions/5856895/…,但请注意,使用反射会产生一些性能开销。如果您使用的是 Java 8,则可以使用 ("lastName",Bean::getLastName) 之类的值创建一个 HashMap
> 以按名称快速查找字段访问器。
标签: java design-patterns javabeans