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を返す