2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者向け】Mapの考え方・使い方(Salesforce)

Last updated at Posted at 2022-11-22

はじめに

Mapの使い方は慣れるまで大変難しく感じると思います。私自身、全くの初心者から始め一番理解に時間がかかったのがMapでした。

私のような初心者の方に少しでもわかりやすく素人ならではの目線で解説してみようと思いますので参考までに見ていただければ幸いです。

Mapの考え方

今回MapをExcelのフィルターに例えて説明していきます。
image.png

Excel上でフィルターをかけるときに検索ワードを入力すると思います。こちらがMapで言う「key」に当たります。
image.png

そして条件を入れた結果絞られる情報がMapで言う「value」です。
image.png

このように考えると「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に関する記事を載せるので興味ある方はご覧ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?