2022/04/28

SalesforceのMapクラスとは?よく利用するパターンごとに使い方を解説

 
  

SalesforceのMapクラスとは?

SalesforceのMapクラスとは、キーと値がセットになったApexのコレクション型クラスです。 SalesforceのMapクラスの一部のメソッドは、JavaのMapクラスのメソッドと似ています。また、他にもJavaのMapクラスと似ている点に、同じキーに対して別々の値を持てない点があります。 共通点がある一方で、SalesforceのMapでは実装クラス(例.HashMap)で初期化する必要がないなど違いがあるため、注意が必要です。JavaのMapクラスとの違いの詳細は、Apex開発者ガイドをご確認ください。 なお、キーと値に設定できるデータ型には次の型があります。
  • プリミティブ型
  • コレクション型
  • ユーザ定義型
  • sObject型
  • 組み込みApex型

よく利用するMapクラスの使い方

Mapクラスがよく利用されるパターンごとにメソッドの使い方を解説していきます。 よく利用するMapクラスの使い方についてご興味がある方は、ぜひ参考にしてみてください。

Mapクラスのインスタンスに要素を設定する方法

Mapクラスのインスタンスに値を設定する方法は、4種類あります。 SalesforceのMapクラスはJavaのMapクラスによく似ていますが、Salesforce特有のメソッドも提供されています。

Mapクラスのインスタンスを新規作成し、キーを指定して値を設定する方法

Mapクラスのインスタンスを作成し、put()でキーを指定して値を設定します。
Map<String, Integer> map1 = new Map<String, Integer>();

// put()を利用して、キーと値をセットで指定する
map1.put('りんご', 120);
map1.put('バナナ', 200);

他のオブジェクトの全要素を追加設定する方法

Mapクラスのインスタンスに、putAll()の引数に指定したオブジェクトの全要素を追加設定します。putAll()の引数に指定できるオブジェクトは、Mapクラスまたは、組織のSalesforceオブジェクトであるsObjectの配列のみです。 なお、Mapクラスのインスタンスに既に存在するキーの場合、putAll()の引数で指定されたオブジェクトの値に置き換えられます。また、sObjectの配列をputAll()の引数に指定した場合、キーにsObjectのIDが、そのキーの値にはsObjectが設定されます。 例)putAll()でMapクラスのインスタンスの全要素を追加設定した場合
Map<String, String> map1 = new Map<String, String>();
map1.put('りんご','青森');
Map<String, String> map2 = new Map<String, String>();
map2.put('梨','山梨');

// map1の全要素がmap2に追加設定される
map2.putAll(map1);

System.debug(map2); // りんごと梨の情報が出力される

既に存在するMapクラスの要素を新しいインスタンスにすべて設定する方法

新しいMapクラスのインスタンスを作成したときに、コンストラクタに指定されたMapクラスの全要素を設定します。
Map<String, Integer> map1 = new Map<String, Integer>();
map1.put('りんご', 120);
map1.put('バナナ', 200);

// Mapクラスのコンストラクタにmap1を設定すると、map1の全要素がmap2に設定される
Map<String, Integer> map2 = new Map<String, Integer>(map1);

// List同様に中括弧({})構文を使用し、インスタンスの作成と要素の設定を同時に行える
// 中括弧({})構文では、キーを設定し、「=>」を宣言した後にキーの値を指定する
Map<String, String> producingMap = new Map<String, String>{'りんご' => '青森', '梨' => '山梨'};

sObjectの配列をMapクラスのインスタンスに変換する方法

sObjectの配列からMapクラスに変換したインスタンスを作成します。Salesforce特有のMapクラスの使い方です。作成されたMapクラスのキーにsObjectのIDが、値にはsObjectが設定されます。
// 取引先情報(sObject[])を取得する
List<Account> list = [select Id, Name, Phone from Account];

// 取引先情報(sObject[])がMapクラスに変換され、mapに代入される
Map<Id, Account> map = new Map<Id, Account>(list);

Mapクラスのインスタンスから値を取得する方法

get()の引数にキーを指定して、Mapクラスのインスタンスからキーの値を取得します。
Map<String, String> map = new Map<String, String>();
map.put('りんご','青森');
map.put('バナナ','フィリピン');

// keySet()を利用し、mapのすべてのキーを配列で取得する
// 拡張for文にキーの配列を設定し、キーを1つずつ取り出す
for(String key: map.keySet()) {
  // キーの値を取得する
  System.debug(map.get(key));
}

Mapクラスのインスタンスから要素を削除する方法

SalesforceのMapクラスも、JavaのMapクラス同様にインスタンスから削除する要素の単位ごとに、メソッドが提供されています。削除する要素の単位ごとに削除する方法を解説します。

キーを指定して、要素を削除する方法

remove()の引数にキーを指定して、Mapクラスのインスタンスから指定したキーの要素を削除します。
Map<String, String> map1 = new Map<String, String>();
map1.put('りんご','青森');
map1.put('バナナ','フィリピン');

// キーが「りんご」の要素を削除される
map1.remove('りんご')
System.debug(map1); // バナナの情報だけが表示される

Mapクラスのインスタンスからすべての要素を削除する方法

clear()の引数にキーを指定して、Mapクラスのインスタンスからすべての要素を削除します。
Map<String, String> map = new Map<String, String>();
map.put('りんご','青森');
map.put('バナナ','フィリピン');

// mapからすべての要素を削除される
map.clear()

Mapクラスのインスタンスにキーがあるか、チェックする方法

containsKey()の引数にキーを指定して、指定されたキーがMapクラスのインスタンスに含まれているか、チェックします。指定したキーがインスタンスに含まれている場合、「true」を返却します。
Map<String, String> map = new Map<String, String>();
map.put('りんご','青森');
map.put('バナナ','フィリピン');

// mapのキーに「りんご」が含まれているか、チェックされる
System.assertEquals(true, map.containsKey('りんご'));

Mapクラスを使ってみよう

今回は、SalesforceのMapクラスの使い方について紹介しました。SalesforceのMapクラスはキーと値がセットになったコレクション型クラスです。Mapクラスのようなキーと値がセットのコレクション型クラスは、使い方を工夫すると扱いやすいクラスになります。 Apex言語で開発される方は、Mapクラスをぜひ使ってみてください。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】