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 将被视为不同的键并被视为唯一。