【Salesfoce】Apex Mapとは?使い方を解説

Salesforce

こんにちは、ヨリユです。
本記事では、Mapの使い方について解説していきます。
Apex開発でよく使いますので、使い方を押さえておきましょう!

【この記事から学べること】
・Mapの初期化方法や値の追加・取得などの基本的な使い方

Apex Mapとは?

ApexのMap(マップ)とは、キーと値をペアで扱うときに使用するデータ構造です。
キーの値は一意(重複なし)である必要があります。
Salesforceでレコードを一意に識別できるのは「SalesforceID」です。
例えば、キーに「SalesforceID」、値に「オブジェクト」を格納し、一連の処理を行うことができるので便利です。

Apex Mapの使い方

初期化

初期化する方法はいくつかあります。下記の方法を説明します。

  • 初期化①:基本
  • 初期化②:初期値を代入
  • 初期化③:リストを代入
  • 初期化④:Mapをコピーして代入
  • 初期化⑤:SOQL取得結果を代入

初期化①:基本

基本的な初期化方法です。
以下の例では、キーにInteger型、値にString型をセットできるMapインスタンスを生成しています。

Map<Integer, String> sampMap = new Map<Integer, String>();

初期化②:初期値を代入

初期化時に、初期値を代入することができます。
以下の例では、Mapインスタンスを生成後、初期値を代入しています。
「=>」でキーと値を対応づけています。

Map<Integer, String> sampMap = new Map<Integer, String>{
		1 => 'first', 
		2 => 'second', 
		3 => 'third' 
};

初期化③:リストを代入

初期化時に、リストを代入することができます。
※リストに格納されているデータ型は「sObject型」である必要があります。
以下の例では、Mapインスタンスを生成後、取引先のリストを代入しています。

List<Account> accList = [ SELECT Id, Name FROM Account ];
Map<Id, Account> accMap = new Map<Id, Account>(accList);

初期化④:Mapをコピーして代入

初期化時に、指定したMapをコピーして代入することができます。
以下の例では、Map(sampMap2)インスタンスを生成後、Map(sampMap1)をコピーして代入しています。

Map<Integer, String> sampMap = new Map<Integer, String>{
		1 => 'first', 
		2 => 'second', 
		3 => 'third' 
};

Map<Integer, String> sampMap2 = new Map<Integer, String>(sampMap1);

初期化⑤:SOQL取得結果を代入

初期化時に、SOQL取得結果を代入することができます。
以下の例では、Mapインスタンスを生成後、SOQLで取得した取引先のリストを代入しています。

Map<Id, Account> accMap = new Map<Id, Account>(
    [ SELECT Id, Name FROM Account ]
);

値を追加(put)

値を追加するには「putメソッド」を使用します。
以下の例では、putメソッドを使用して、番号と名前をMapインスタンスに追加しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

値を取得(get)

値を取得するには「getメソッド」を使用します。
getメソッドの引数には、取得したい値のキーを指定します。
以下の例では、値「ichiro」を取得して、変数「name」に代入しています。
getメソッドの引数には、取得したい値(ichiro)のキーである「1」を指定しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

String name = sampMap.get(1);

値を削除 指定(remove)

指定の値を削除するには「removeメソッド」を使用します。
removeメソッドの引数には、削除したい値のキーを指定します。
以下の例では、removeメソッドにキー「1」を指定して、対応付け(キー「1」、値「ichiro」)を削除しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

sampMap.remove(1);

値を削除 すべて(clear)

すべての値を削除するには「clearメソッド」を使用します。
clearメソッドを使用すると、Mapに格納されているすべての値が削除(クリア)されます。
以下の例では、Mapインスタンスを生成し3つの値を追加した後、clearメソッドによってすべての
値を削除しています。Mapインスタンスの中身は空になっています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

sampMap.clear();

値の数を取得(size)

値の数を取得するには「sizeメソッド」を使用します。
sizeメソッドを使用すると、Mapに格納されている値の数を取得できます。
以下の例では、Mapインスタンスを生成し3つの値を追加した後、sizeメソッドによって値の数(=3)を取得し、変数「mapSize」に代入しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

Integer mapSize = sampMap.size(); // 3が返却される

すべてのキーを取得(keySet)

すべてのキーを取得するには「keySetメソッド」を使用します。
keySetメソッドを使用すると、Mapに格納されているすべてのキーセットを取得できます。
以下の例では、Mapインスタンスを生成し3つの値を追加した後、keySetメソッドによってすべてのキーを取得し、Set「sampSet」に代入しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'jiro');
sampMap.put(3, 'saburo');

Set <String> sampSet = new Set<String>();
sampSet = sampMap.keySet(); // 1, 2, 3が返却される

すべての値を取得(values)

すべての値を取得するには「valuesメソッド」を使用します。
valuesメソッドを使用すると、Mapに格納されているすべての値のリストを取得できます。
以下の例では、Mapインスタンスを生成し3つの値を追加した後、valuesメソッドによってすべての値のリストを取得し、List「sampList」に代入しています。

Map<Integer, String> sampMap = new Map<Integer, String>();
sampMap.put(1, 'ichiro');
sampMap.put(2, 'ichiro');
sampMap.put(3, 'saburo');

List<String> sampList = new List<String>();
sampList = sampMap.values(); // 'ichiro', 'ichiro', 'saburo'が返却される

終わりに

いかがでしたでしょうか。
今回はMapの使い方を解説してきました。
ぜひデバッグで動きをみつつ、試しながら身につけていきましょう!
ご覧いただきありがとうございました!