StringBuilderの内部に複数のStringBuilders。それは価値がありますか?

Coffemanz:

私は、モデルの一覧が表示されます。モデルの数が大きくなる可能性があります。このモデルは、プロパティの束を持っており、それらのいずれかが考えられnullを潜在的に。

私はそれの性質のもと、すべてのモデルのための文字列を構築する必要があります。場合プロパティ== nullがその後、私のような結果文字列にいくつかの静的な部分を追加し、「プロパティ1がヌルです」

それ以外の場合は財産!= nullを、私はこのような何かを追加し、「プロパティ1 == 『valueOfThePropertyHere』」

結果文字列は次のようになります。 prop1 == 'value1' and prop2 is null and prop3 == 'value3' and prop4 == 'value4' and prop5 is null and ..... propN == 'valueN'

そして私は、リストからすべてのモデルのために、このような文字列を生成します。

もちろん、私は、forループでこれを行うと、私はこのためのStringBuilderを使用しています。事はしていることであるアペンドのStringBuilder Iの方法三項演算子を使用して、ヌルためのモデルのすべてのフィールドをチェックし、これに基づいて、私は結果の文字列には、このチェックの結果を追加します。プロパティがnullでない場合しかし、その後、私は、それ自体がいくつかのより多くの静的なものを+フィールドのいくつかの静的な部分+値を追加する必要があります。そして、私は私が持っているすべてのプロパティのための1つ以上のStringBuilderを追加する必要があることを意味しています。それとも私はとにかくのStringBuilderに変換し、私の知る限りでは、それはStringBuilderの内側に「+」を使用して悪い習慣だされる「+」を使用することができます(私はとにかくそれを使用する必要があります)。

例:

List<Model> models = repository.getModels();

for (Model m: models) {
    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder
    .append(m.getField1() == null ? "field1  is null" : "field1 == '" + new StringBuiler().append(m.getField1()).append("'").append(" and ").toString()))
    .append(m.getField2() == null ? "field2  is null" : "field2 == '" + new StringBuiler().append(m.getField2()).append("'").append(" and ").toString()))
    ...............
    .append(m.getFieldN() == null ? "fieldN  is null" : "fieldN == '" + new StringBuiler().append(m.getFieldN()).append("'").append(" and ").toString()));

    System.out.println(stringBuilder.toString());
    }

モデルのリストから、すべてのモデルのために、私はStringBuilderの別の束を作成するため、パフォーマンスの観点から、私の意見では、それはとてもよく見えないだけで、結果の文字列を取得するには、ヒープ内のオブジェクト。

私何か不足していますか?パフォーマンスの観点から、そうするより良い方法はありますか?私は今のところ、他のオプションが表示されていないため、またはそれは大丈夫です。

アンディ・ターナー:

シンプルなのために行きます。

の代わりに

stringBuilder
.append(m.getField1() == null ? "field1  is null" : "field1 == '" + new StringBuiler().append(m.getField1()).append("'").append(" and ").toString()))

使用する:

if (m.getField1() == null) {
  stringBuilder.append("field1  is null");
} else {
  stringBuilder.append("field1 == '").append(m.getField1()).append("'").append(" and ");
}

別に使用しての明確な奇数判定からStringBuilder内側StringBuilder.append(と理由だけで使用しないでコール+...とにかく)、それがどこ解析するのは本当に難しい:条件式です。ラインにそれを破ることは非常に簡単です。


あなた自身が、このコードパターンをたくさん繰り返すこと見つけた場合、メソッドを定義します。

void append(StringBuilder stringBuilder, String name, Object value) {
  stringBuilder.append(name);
  if (value == null) {
    stringBuilder.append(" is null");
  } else {
    stringBuilder.append(" == '").append(value).append("'").append(" and ");
  }
}

その後、のように呼び出します。

append(stringBuilder, "field1", m.getField1());
append(stringBuilder, "field2", m.getField2());
append(stringBuilder, "field3", m.getField3());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=337833&siteId=1