0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Apex】Salesforce ApexにおけるListの要素検索: 2重ループを回避するベストプラクティス

Posted at

はじめに

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 を格納しておくことで、特定の要素が存在するかの確認を効率的に行うことができます。また、二重ループが不要となり、コードの見通しも良くなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?