Apexにはガバナ制限があり、Salesforce サーバの最大 CPU 時間は10,000 ミリ秒となっています。つまり10秒以上かかる処理はガバナ制限によるエラーが発生する可能性が増えます。
C#やJavaではStringBuilderクラスを使って高速に文字列結合する方法がありますが、Apexにはそのようなクラスは用意されていません。「+」や「+=」演算子よりも高速に文字列結合ができるString.join()について紹介します。
「+」や「+=」演算子による結合
あくまでサンプルですが、取引先の数が多くなればなるほどガバナ制限のエラーが怖くなってきます。
String str = '';
for( Account acc : [SELECT Name,PersonEmail FROM Account] ){
str += '名前:' + acc.Name;
str += 'メール:' + acc.PersonEmail;
str += ';';
}
文字列結合の回数が多い場合は、次に紹介するString.join()を使ってみましょう。
String.join()を使った高速文字列結合
変数lstをインスタンス化して、そこにaddしていって、最後にString.join()のセパレータ(区切り文字)を空文字にして高速文字列結合してます。
List<String> lst = new List<String>();
// 変数 lst に文字列を追加する
// 例) lst.add('');
String str = String.join(lst, '');
セパレータをカンマやタブにすればCSV形式にもできます。
まとめ
文字列結合の回数が少なければ「+」や「+=」演算子で問題ありませんが、回数が多く処理に時間が掛かってくる場合はString.join()関数を使って高速文字列結合しましょう。