【Salesforce/Apex】String.join()で高速文字列結合(文字列連結)する

Salesforce
この記事は約2分で読めます。

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()関数を使って高速文字列結合しましょう。

この記事を書いた人
サイト運営者
Ryu
Ryu

情シス支援・開発・コンサルを提供するITエンジニア。転職含め10社以上経験。第二新卒から未経験でIT就職。社内SE、システム開発会社、コンサルファーム等を経ている。企画〜運用保守、フロント〜バック・インフラと守備範囲は広い。C#とSQLとSalesforceが得意。

Ryuをフォローする
Salesforce
スポンサーリンク