こんにちは、ヨリユです。
本記事では、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の使い方を解説してきました。
ぜひデバッグで動きをみつつ、試しながら身につけていきましょう!
ご覧いただきありがとうございました!