はじめに
Salesforce Apexを使用して開発を行う際、Listから特定の要素を検索することは頻繁にあります。しかし、初心者の方は二重ループを使ってしまうことが多く、パフォーマンスが低下しがちです。
本記事はコーディング経験がほとんど無い方から、少しコーディングに慣れてきた方あたりを対象としています。
たとえば、以下のようなコードです。
Id targetUserId = '0001';
for(Account acc : accList){
Id ownerId;
for(Contact cnt : cntList){
if(cnt.AccountId == targetUserId){
ownerId = cnt.OwnerId;
}
}
}
このコードは、accList と cntList の2重ループで検索を行っていますが、データ量が多い場合、パフォーマンスが悪化する原因となります。
Setを活用してパフォーマンスを向上させる
Setを使うことで、パフォーマンスを向上させながら同じ処理を実現できます。以下が、Setを活用した修正版コードです。
コードをコピーする
Id targetUserId = '0001';
Set<Id> accountIdSet = new Set<Id>();
for(Contact cnt : cntList){
accountIdSet.add(cnt.AccountId);
}
if(accountIdSet.contains(targetUserId)){
for(Contact cnt : cntList){
if(cnt.AccountId == targetUserId){
Id ownerId = cnt.OwnerId;
// 必要な処理をここに記述
break;
}
}
}
まとめ
このように、事前に Set を作成して該当する Id を格納しておくことで、特定の要素が存在するかの確認を効率的に行うことができます。また、二重ループが不要となり、コードの見通しも良くなります。