Apex-コレクション
コレクションは、複数のレコードを格納できる変数の一種です。たとえば、Listには複数のAccountオブジェクトのレコードを保存できます。ここで、すべてのコレクションタイプの詳細な概要を見てみましょう。
リスト
リストには、プリミティブ、コレクション、sObject、ユーザー定義、および組み込みのApexタイプのレコードをいくつでも含めることができます。これは最も重要なタイプのコレクションの1つであり、Listで使用するために特別に調整されたいくつかのシステムメソッドがあります。リストインデックスは常に0で始まります。これはJavaの配列と同義です。リストは、キーワード「リスト」で宣言する必要があります。
Example
以下は、プリミティブデータ型(文字列)のリスト、つまり都市のリストを含むリストです。
List<string> ListOfCities = new List<string>();
System.debug('Value Of ListOfCities'+ListOfCities);
リストの初期値の宣言はオプションです。ただし、ここで初期値を宣言します。以下は同じことを示す例です。
List<string> ListOfStates = new List<string> {'NY', 'LA', 'LV'};
System.debug('Value ListOfStates'+ListOfStates);
アカウントのリスト(sObject)
List<account> AccountToDelete = new List<account> (); //This will be null
System.debug('Value AccountToDelete'+AccountToDelete);
ネストされたリストを宣言することもできます。それは5つのレベルまで上がることができます。これは多次元リストと呼ばれます。
これは整数のセットのリストです。
List<List<Set<Integer>>> myNestedList = new List<List<Set<Integer>>>();
System.debug('value myNestedList'+myNestedList);
リストには任意の数のレコードを含めることができますが、パフォーマンスの問題を防ぎ、リソースを独占するために、ヒープサイズに制限があります。
リストのメソッド
リストのサイズの計算、要素の追加などのいくつかの機能を実現するためにプログラミング中に利用できるリストに使用できるメソッドがあります。
以下は、最も頻繁に使用されるいくつかの方法です-
- size()
- add()
- get()
- clear()
- set()
次の例は、これらすべての方法の使用法を示しています
// Initialize the List
List<string> ListOfStatesMethod = new List<string>();
// This statement would give null as output in Debug logs
System.debug('Value of List'+ ListOfStatesMethod);
// Add element to the list using add method
ListOfStatesMethod.add('New York');
ListOfStatesMethod.add('Ohio');
// This statement would give New York and Ohio as output in Debug logs
System.debug('Value of List with new States'+ ListOfStatesMethod);
// Get the element at the index 0
String StateAtFirstPosition = ListOfStatesMethod.get(0);
// This statement would give New York as output in Debug log
System.debug('Value of List at First Position'+ StateAtFirstPosition);
// set the element at 1 position
ListOfStatesMethod.set(0, 'LA');
// This statement would give output in Debug log
System.debug('Value of List with element set at First Position' + ListOfStatesMethod[0]);
// Remove all the elements in List
ListOfStatesMethod.clear();
// This statement would give output in Debug log
System.debug('Value of List'+ ListOfStatesMethod);
以下に示すように、配列表記を使用してリストを宣言することもできますが、これはApexプログラミングでは一般的な方法ではありません。
String [] ListOfStates = new List<string>();
セット
セットは、複数の順序付けされていない一意のレコードを含むコレクションタイプです。セットに重複するレコードを含めることはできません。リストと同様に、セットはネストできます。
Example
会社が販売している製品のセットを定義します。
Set<string> ProductSet = new Set<string>{'Phenol', 'Benzene', 'H2SO4'};
System.debug('Value of ProductSet'+ProductSet);
セットのメソッド
Setは、以下に示すようにプログラミング中に利用できるメソッドをサポートします(上記の例を拡張しています)-
// Adds an element to the set
// Define set if not defined previously
Set<string> ProductSet = new Set<string>{'Phenol', 'Benzene', 'H2SO4'};
ProductSet.add('HCL');
System.debug('Set with New Value '+ProductSet);
// Removes an element from set
ProductSet.remove('HCL');
System.debug('Set with removed value '+ProductSet);
// Check whether set contains the particular element or not and returns true or false
ProductSet.contains('HCL');
System.debug('Value of Set with all values '+ProductSet);
マップ
これは、各値の一意のキーを含むキーと値のペアです。キーと値はどちらも任意のデータ型にすることができます。
Example
次の例は、製品名と製品コードのマップを表しています。
// Initialize the Map
Map<string, string> ProductCodeToProductName = new Map<string, string>
{'1000'=>'HCL', '1001'=>'H2SO4'};
// This statement would give as output as key value pair in Debug log
System.debug('value of ProductCodeToProductName'+ProductCodeToProductName);
マップの方法
以下は、Map-で使用できる方法を示すいくつかの例です。
// Define a new map
Map<string, string> ProductCodeToProductName = new Map<string, string>();
// Insert a new key-value pair in the map where '1002' is key and 'Acetone' is value
ProductCodeToProductName.put('1002', 'Acetone');
// Insert a new key-value pair in the map where '1003' is key and 'Ketone' is value
ProductCodeToProductName.put('1003', 'Ketone');
// Assert that the map contains a specified key and respective value
System.assert(ProductCodeToProductName.containsKey('1002'));
System.debug('If output is true then Map contains the key and output is:'
+ ProductCodeToProductName.containsKey('1002'));
// Retrieves a value, given a particular key
String value = ProductCodeToProductName.get('1002');
System.debug('Value at the Specified key using get function: '+value);
// Return a set that contains all of the keys in the map
Set SetOfKeys = ProductCodeToProductName.keySet();
System.debug('Value of Set with Keys '+SetOfKeys);
マップ値は順序付けられていない可能性があるため、値が格納されている順序に依存せず、常にキーを使用してマップにアクセスしようとしないでください。マップ値はnullにすることができます。Stringが宣言されている場合のマップキーでは、大文字と小文字が区別されます。たとえば、ABCとabcは異なるキーと見なされ、一意として扱われます。