我猜测其目的是生成一个“报告”列表,每个找到的BDDObject
记录都有一个。基于这个想法,您的代码应该看起来更像这样:
public List<String> getReport(List<BDDObject> records) {
List<String> reports = new ArrayList<String>(record.size());
for (BDDObject record:records) {
String newMedcondRefChild = String.valueOf(record.getValue( IDDConstants.IDD_THERAPY_AREA_REF_VALUE))
.toLowerCase()
.trim() + String.valueOf(record.getValue(IDDConstants.IDD_THERAPY_AREA_REF_TYPE_NAME)))
.toLowerCase().trim());
reports.add(newMedcondRefChild);
}
return reports;
}
关于 toString() 是否有用的问题,我认为它适合的唯一地方就是它BDDObject
本身。它看起来像这样:
class BDDObject {
...
@Override
public String toString() {
return String.valueOf(getValue(IDDConstants.IDD_THERAPY_AREA_REF_VALUE)).toLowerCase().trim() +
String.valueOf(getValue(IDDConstants.IDD_THERAPY_AREA_REF_TYPE_NAME)).toLowerCase().trim());
}
在这种情况下,创建报告的功能变得微不足道:
public List<String> getReport(List<BDDObject> records) {
List<String> reports = new ArrayList<String>(record.size());
for (BDDObject record:records) {
reports.add(record.toString());
}
return reports;
}
如果您想要的是一个带有所有值的 looooong 字符串,您可以使用 StringBuilder,如下所示:
public String getReport(List<BDDObject> records) {
StringBuilder sb = new StringBuilder();
for (BDDObject record:records) {
sb.append(String.valueOf(record.getValue( IDDConstants.IDD_THERAPY_AREA_REF_VALUE))
.toLowerCase()
.trim());
sb.append(String.valueOf(record.getValue(IDDConstants.IDD_THERAPY_AREA_REF_TYPE_NAME))
.toLowerCase().trim()));
}
return sb.toString();
}
这将返回所有附加的记录。我怀疑它的可读性,但我希望你明白。当您需要以迭代方式构建字符串时(如前面的示例),StringBuilder 很有帮助。StringBuilder 不应用于替换单个 String 操作,例如 :String a = b.get() + c.get();
考虑到编译器在这些情况下隐式创建 StringBuilder,因此不会实现实际的性能改进。