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

