Apex - Коллекции

Коллекции - это тип переменных, которые могут хранить несколько записей. Например, List может хранить несколько записей объекта Account. Давайте теперь подробно рассмотрим все типы коллекций.

Списки

Список может содержать любое количество записей примитивов, коллекций, объектов sObject, определенных пользователем и встроенных в тип Apex. Это один из наиболее важных типов коллекций, а также у него есть некоторые системные методы, специально предназначенные для использования со списком. Индекс списка всегда начинается с 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);

Мы также можем объявить вложенный список. Он может доходить до пяти уровней. Это называется многомерным списком.

Это список набора целых чисел.

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);

Значения карты могут быть неупорядоченными, и, следовательно, мы не должны полагаться на порядок, в котором значения хранятся, и пытаться получить доступ к карте, всегда используя ключи. Значение карты может быть нулевым. Ключи карты при объявлении String чувствительны к регистру; например, ABC и abc будут рассматриваться как разные ключи и обрабатываться как уникальные.