さてさてさて、今回は、Map<Id, List<Sobject>>の形を使用してみました。
キーにはIdを指定して、バリューにはリストですね。
この記事では例として、取引先のIdをキーにして、取引先責任者のリストをバリューに設定してみます。
書き方はこんな感じ↓
//Map宣言
Map<Id, List<Contact>> accConMap = new Map<Id, List<Contact>>();
for(Contact con : [select Id, AccountId from Contact]){
Id accId = con.AccountId;
//Mapのキーにfor文で回してきた取引先Idがすでに存在しているか確認
if(accConMap.containskey(accId)){
//存在している場合、Listに取引先責任者を追加
accConMap.get(accId).add(con);
}else{
//存在していない場合、取引先Idと取引先責任者をMapに格納
accConMap.put(accId, new List<Contact>());
accConMap.get(accId).add(con);
}
}
値を取り出す時は、取引先のIdを指定してあげるだけで、紐づく取引先責任者のレコードがすべてgetできるの非常に使い勝手がいいですね。
親子関係のオブジェクトで、親レコードをキーにして、それに紐づく複数の子レコードをまとめて格納しておきたい時なんかに力を発揮してくれそうです。
これは今後も多様していく気がビシビシしています。
コメント