Apex - 集合

集合是一种可以存储多条记录的变量。 例如,List可以存储多个Account对象的记录。 现在让我们详细概述所有集合类型。

列表

列表可以包含任意数量的基元、集合、sObject、用户定义和内置 Apex 类型的记录。 这是最重要的集合类型之一,而且它有一些专门为与 List 一起使用而定制的系统方法。 列表索引始终从 0 开始。这与 Java 中的数组同义。 应使用关键字"List"声明列表。

示例

下面是包含原始数据类型(字符串)的列表的列表,即城市列表。

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

以下示例演示了所有这些方法的使用

// 初始化列表
List<string> ListOfStatesMethod = new List<string>();

// 该语句将在调试日志中输出 null
System.debug('Value of List'+ ListOfStatesMethod);

// 使用add方法将元素添加到列表中
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);

// 获取索引为0的元素
String StateAtFirstPosition = ListOfStatesMethod.get(0);

// 该语句将在调试日志中将 New York 作为输出
System.debug('Value of List at First Position'+ StateAtFirstPosition);

// 将元素设置在 1 位置
ListOfStatesMethod.set(0, 'LA');

// 该语句将在调试日志中给出输出
System.debug('Value of List with element set at First Position' + ListOfStatesMethod[0]);

// 删除List中所有元素
ListOfStatesMethod.clear();

// 该语句将在调试日志中给出输出
System.debug('Value of List'+ ListOfStatesMethod);

您也可以使用数组表示法来声明列表,如下所示,但这在 Apex 编程中并不常见−

String [] ListOfStates = new List<string>();

Set

Set 集合是一种集合类型,其中包含多个无序的唯一记录。 Set 不能有重复的记录。 与列表一样,集合可以嵌套。

示例

我们将定义公司销售的产品集。

Set<string> ProductSet = new Set<string>{'Phenol', 'Benzene', 'H2SO4'};
System.debug('Value of ProductSet'+ProductSet);

集合方法

Set 确实支持我们在编程时可以使用的方法,如下所示(我们正在扩展上面的示例) −

// 添加一个元素到集合中
// 如果之前没有定义则定义set
Set<string> ProductSet = new Set<string>{'Phenol', 'Benzene', 'H2SO4'};
ProductSet.add('HCL');
System.debug('Set with New Value '+ProductSet);

// 从集合中删除一个元素
ProductSet.remove('HCL');
System.debug('Set with removed value '+ProductSet);

// 检查集合是否包含特定元素并返回 true 或 false
ProductSet.contains('HCL');
System.debug('Value of Set with all values '+ProductSet);

映射

它是一个键值对,其中包含每个值的唯一键。 键和值都可以是任何数据类型。

示例

以下示例表示产品名称与产品代码的映射。

// 初始化映射
Map<string, string> ProductCodeToProductName = new Map<string, string>
{'1000'=>'HCL', '1001'=>'H2SO4'};

// 该语句将在调试日志中将输出作为键值对
System.debug('value of ProductCodeToProductName'+ProductCodeToProductName);

映射方法

以下是一些示例,演示了可以与 Map 一起使用的方法 −

// 定义一个新的映射
Map<string, string> ProductCodeToProductName = new Map<string, string>();

// 在映射中插入一个新的键值对,其中"1002"是键,"Acetone"是值
ProductCodeToProductName.put('1002', 'Acetone');

// 在映射中插入一个新的键值对,其中"1003"是键,"Ketone"是值
ProductCodeToProductName.put('1003', 'Ketone');

// 断言映射包含指定的键和相应的值
System.assert(ProductCodeToProductName.containsKey('1002'));
System.debug('If output is true then Map contains the key and output is:'
   + ProductCodeToProductName.containsKey('1002'));

// 给定特定键检索值
String value = ProductCodeToProductName.get('1002');
System.debug('Value at the Specified key using get function: '+value);

// 返回包含映射中所有键的集合
Set SetOfKeys = ProductCodeToProductName.keySet();
System.debug('Value of Set with Keys '+SetOfKeys);

映射值可能是无序的,因此我们不应该依赖值的存储顺序并尝试始终使用键来访问映射。 映射值可以为空。 声明 String 时的映射键区分大小写; 例如,ABC 和 abc 将被视为不同的键并被视为唯一。