0

这是一段代码。

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 操作中?

4

2 回答 2

0

在您问题的代码中,StringBuffer/StringBuilder不会给您带来任何性能提升,因为您只连接两个字符串。但是,该问题并未说明您对newMedconfRefChild. 如果您的实际目标是连接每个循环迭代的字符串,那么您应该使用 a StringBuilderStringBuffer仅在确实需要时使用,prefer StringBuilder)。

于 2012-07-30T09:32:18.087 回答
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,因此不会实现实际的性能改进。

于 2012-07-30T10:46:14.163 回答