2重ループの回避【Mapクラス】

概要

2重ループとは、ループ文の中にループ文を記述することです。
●パフォーマンスが悪い
●対象のレコードが100件を超えると「Too many SOQL queries: 101」のエラーが発生
以上のことから2重ループの回避が必要です。
Mapクラスを活用して2重ループを回避しましょう。

2重ループの例

List<Account> accs = [SELECT Id FROM Account];
List<Contact> cons = [SELECT AccountId FROM Contact];

for(Account acc : accs) {
    for(Contact con : cons) {
        if(acc.Id == con.AccountId) {
            // 処理を記述
        }
    }
}

取引先レコードのIDと取引先責任者レコードに紐づく取引先IDが同じ場合にそれぞれ処理を行います。
Mapクラスを使うことで2重ループを回避できます。

Mapクラスを使用

List<Contact> cons = [SELECT AccountId FROM Contact];
Map<Id, Account> accMap = new Map<Id, Account> ([SELECT Id FROM Account]); 

for(Contact con : cons) {
    if(accMap.get(con.AccountId) != null) {
        // 処理を記述   
    }
}

Mapクラスのgetメソッドを使用して
取引先レコードから取引先責任者レコードに紐づく取引先Idが取得できた場合にそれぞれ処理を行います。

Map.get(key) : Map型のレコードから指定したキーの値が取得できない場合はnullを返す