はじめに
Mapの使い方は慣れるまで大変難しく感じると思います。私自身、全くの初心者から始め一番理解に時間がかかったのがMapでした。
私のような初心者の方に少しでもわかりやすく素人ならではの目線で解説してみようと思いますので参考までに見ていただければ幸いです。Mapの考え方
今回MapをExcelのフィルターに例えて説明していきます。
Excel上でフィルターをかけるときに検索ワードを入力すると思います。こちらがMapで言う「key」に当たります。
そして条件を入れた結果絞られる情報がMapで言う「value」です。
このように考えると「key」に入れる検索ワードの型と返ってきてほしい情報の型を指定してあげればほしい情報が取れるという理由がわかると思います。
MapはSOQLの消費回数を減らしたい場合に便利なのでぜひ使ってみてください。
それでは次は使い方を学んでみましょう。
Mapの使い方
いざ実践です。ここでは使い方を2パターンに分けて説明していきたいと思います。
1. Map< String,sObject> の使い方
以下のように「検索ワード:Id, 検索結果:Account」が返ってくるコードを実装します。
private static Map<String, Account> returnAccountMap(Set<String> accSet){
//Mapを初期化
Map<String,Account> accountMap = new Map<String,Account>();
//ほしい情報を最初にリストで取得
List<Account> accList = [SELECT Id, Name FROM Account WHERE Id IN :accSet];
//Listをループで回し、検索ワードとしたい物を最初、結果として返ってきてほしい情報を2つ目にputする
for(Account acc : accList){
accountMap.put(acc.Id, acc);
}
return accountMap;
}
ここまで書ければほしい情報はaccountMapにまとまりました。
次は格納した情報にアクセスしほしい情報だけを取り出してみましょう。
private String getAccountValue(){
//検索ワード
String accId = '11111';
//オブジェクトとして返したい場合
Account acc = accountMap.get(accId);
//オブジェクトの項目単位で返したい場合
String accName = accountMap.get(accId).Name;
return accName;
}
上記のように取り出すと自分の欲しい情報をSOQLを消化せず取得することが可能です。
2. Map< String, List< sObject >> の使い方
このパターンは検索ワードに対し複数の結果が返ってくることが想定される場合に使用すると便利です。
private Map<Id,List<Event>> getEventMap(Set<String> accSet){
//Mapを初期化
Map<Id,List<Event>> eventMap = new Map<Id,List<Event>>();
//取得したい行動を一括で取得
List<Event> eventList = [SELECT Id,Subject,ActivityDate,WhatId
FROM Event
WHERE WhatId IN :accSet];
//上記で取得したEventをfor文で回す
for(Event ev : eventList){
//関連先はAccountのことを指すため紐づき先が変わったタイミングでAccount毎にまとめたListをMapにputする
List<Event> accountEventList = eventMap.get(ev.WhatId);
if(accountEventList == null){
accountEventList = new List<Event>{ev};
} else {
accountEventList.add(ev);
}
eventMap.put(ev.whatId, accountEventList);
}
return eventMap;
}
取得方法はもう一つのパターンと同じになりますが、返ってくる値がListになるのでご注意ください。
さいごに
ここまで読んでいただきありがとうございます。
Mapといわれるといやだなあと最初は思うかもしれませんが使って慣れてしまえば便利になるものです!
ぜひ使ってみてください!
最後に公式のMapに関する記事を載せるので興味ある方はご覧ください。