我的 myArrayList 中已经有值。对于这个例子,假设其中只有两个元素(firstName 和 lastName)。我需要从 myArrayList 获取值并将它们与 String 进行比较,如果匹配则从 bean 获取值并将其放入映射中:
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);”行是说方法 get(String) 在 bean 类中未定义,实际上我们在 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 的回答对我来说非常好,谢谢大家的帮助!干杯!
最佳答案
@HankD 和 @Natalia 提供了一些有效的解决方案,但我没有看到提到的另一个选项是重构 Bean
以支持 get(String)
方法:
public class Bean implements Serializable {
private Map<String, String> properties = new HashMap<>();
public String get(String property) {
return properties.get(property);
}
public void set(String property, String value) {
properties.put(property, value);
}
public String getFirstName(){
return get("firstName");
}
public void setFirstName(String firstName){
set("firstName", firstName);
}
public String getLastName(){
return get("lastName");
}
public void setLastName(String lastName){
set("lastName", lastName);
}
}
关于java - 更好的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874927/