这是一段代码。
List<BDDObject> childlist = savingObject.getChildren("TherapyAreaReference");
if (childlist.size() > 1) {
for (int i = 0; i < childlist.size() - 1; i++) {
String newMedcondRefChild = ((String) childlist
.get(i)
.getValue( IDDConstants.IDD_THERAPY_AREA_REF_VALUE))
.toLowerCase()
.trim()
.concat(((String) childlist
.get(i)
.getValue(IDDConstants.IDD_THERAPY_AREA_REF_TYPE_NAME))
.toLowerCase().trim());
}
}
IDDConstants中定义了公共静态最终字符串。由于StringBuffer更有效,如何将它整合到concat操作中?
答案 0 :(得分:0)
在您问题的代码中,StringBuffer
/ StringBuilder
不会给您带来任何性能提升,因为您只会连接两个字符串。但是,问题并未说明您在newMedconfRefChild
中使用字符串做了什么。如果您的实际目标是连接每个循环迭代的字符串,然后,您应该使用StringBuilder
(仅在确实需要时使用StringBuffer
,更喜欢{{1} })。
答案 1 :(得分:0)
我猜测的目的是生成“报告”列表,每个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,因此无法实现性能改进。