sObject の対応付け
対応付けのキーと値には、Account などの sObject 型を含む、任意のデータ型を使用できます。
対応付けは、キーと値の両方で sObject を保持します。対応付けのキーは、対応付けの値に対応付ける一意の値を表します。たとえば、一般的なキーは取引先 (特定の sObject 型) に対応付ける ID です。この例では、キーが ID 型で、値が Account 型の対応付けを定義する方法を示します。
1Map<ID, Account> m = new Map<ID, Account>();プリミティブ型同様、中括弧 ({}) 構文を使用して対応付けを宣言する場合、対応付けのキーと値のペアを入力できます。中括弧の中で、キーを最初に指定し、=> を使用してそのキーの値を指定します。この例では、取引先リストに対する整数の対応付けを作成し、作成済みの取引先リストを使用して 1 つのエントリを追加します。
1Account[] accs = new Account[5]; // Account[] is synonymous with List<Account>
2Map<Integer, List<Account>> m4 = new Map<Integer, List<Account>>{1 => accs};対応付けのキーには sObject を使用できます。sObject 項目値が変更される可能性がある場合、sObject はキーに使用しないでください。
SOQL クエリによる対応付けエントリの自動入力
SOQL クエリを使用する場合、SOQL クエリで返された結果から対応付けを自動入力できます。対応付けのキーは ID データ型または String データ型で宣言する必要があり、対応付けの値は sObject データ型として宣言する必要があります。
次の例では、クエリから新しい対応付けを入力する方法を示します。この例では、SOQL クエリは Id 項目と Name 項目を含む取引先のリストを返します。new 演算子は、返された取引先のリストを使用して対応付けを作成します。
1// Populate map from SOQL query
2Map<ID, Account> m = new Map<ID, Account>([SELECT Id, Name FROM Account LIMIT 10]);
3// After populating the map, iterate through the map entries
4for (ID idKey : m.keyset()) {
5 Account a = m.get(idKey);
6 System.debug(a);
7}この種の対応付けは一般的に、メモリ内での 2 つのテーブルの「結合」に使用します。
Map メソッドの使用
Map クラスは、要素の追加、削除、取得など、対応付け要素の操作に使用できるさまざまなメソッドを公開しています。次の例では、Map メソッドを使用して新しい要素を追加し、対応付けから既存の要素を取得します。さらに、キーの有無をチェックし、すべてのキーのセットを取得します。この例での対応付けには、整数のキーと取引先の値が含まれる 1 つの要素があります。
1Account myAcct = new Account(); //Define a new account
2Map<Integer, Account> m = new Map<Integer, Account>(); // Define a new map
3m.put(1, myAcct); // Insert a new key-value pair in the map
4System.assert(!m.containsKey(3)); // Assert that the map contains a key
5Account a = m.get(1); // Retrieve a value, given a particular key
6Set<Integer> s = m.keySet(); // Return a set that contains all of the keys in the map