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 には、public static final 文字列が定義されています。StringBuffer の方が効果的ですが、concat 操作にどのように組み込むことができますか?

4

2 に答える 2

0

質問のコードでは、2つの文字列のみを連結しているため、StringBuffer/StringBuilderではパフォーマンスが向上しません。ただし、質問には、の文字​​列で何をしているのかは記載されていませんnewMedconfRefChild。実際の目標が各ループ反復の文字列を連結することである場合は、を使用する必要がありますStringBuilderStringBuffer本当に必要な場合にのみ使用し、prefer StringBuilder)。

于 2012-07-30T09:32:18.087 に答える
0

BDDObject見つかったレコードごとに 1 つずつ、「レポート」のリストを生成することが意図されていると思います。その考えに基づいて、コードは次のようになります。

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;
}

すべての値が連結された長い文字列が必要な場合は、次のように 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 は、(前の例のように) 文字列を繰り返し作成する必要がある場合に役立ちます。のような単一の String 操作を置き換えるために StringBuilder を使用しないでくださいString a = b.get() + c.get();。これらの場合、コンパイラは暗黙的に StringBuilder を作成するため、実際のパフォーマンスの向上は達成されません。

于 2012-07-30T10:46:14.163 に答える