同学们,咱们今天来看一个特别实用的知识点——Apex里的Map,也就是映射。
你可以把Map理解成一个存放“键值对”的容器,就像一本通讯录。通讯录里,每个联系人有一个独一无二的姓名作为“键”,后面的电话号码就是“值”。这个键必须是唯一的,一个姓名只能对应一个最新号码,如果你又用同一个姓名存了一个新号码,那旧号码就被覆盖掉了。而值是可以重复的,不同联系人当然可以有相同的电话号码。
在Apex里,我们怎么初始化一个Map呢?用大括号括起来,然后用一个箭头 `=>` 把键和值连起来。比如这样:
```apex
Map
phoneBook = new Map{
'张三' => '13800001111',
'李四' => '13900002222'
};
```
你看,是不是很直观?
在Apex编程里,有一个最常用的Map模式,就是从记录ID到sObject对象的映射。因为Salesforce里的每一条记录,无论是客户、联系人或自定义对象,都有一个全局唯一的ID,用这个ID作为键,可以直接拿到对应的整个记录对象,查找起来非常快,是恒定时间,也就是说,无论数据量多大,这个查找几乎都瞬间完成。
所以,我们经常能看到类似 `Map` 这样的声明。比如你有一个账户列表,你想通过ID快速找到某个账户,这时Map就太好用了。
而且,Apex还贴心地提供了一个非常方便的构造函数,你只要把一个sObject列表直接传进去,它就会自动帮你生成一个以每条记录的ID为键、记录本身为值的Map。就好比把一堆名片扔进一个神奇机器,瞬间就整理出一本按编号索引的名片簿。比如:
```apex
List accList = [SELECT Id, Name FROM Account LIMIT 10];
Map accMap = new Map(accList);
```
这样,你就可以随时用 `accMap.get(someId)` 拿到对应账户了。
好,这个Slide的核心就这么多。简单回顾下:Map是键值对,键唯一值可重复;用箭头语法初始化;最常见的是Id到sObject的Map,实现快速查找;并且可以直接用列表构造出这个Map。在后面的触发器、批量处理里,你会经常跟它打交道,把它掌握好,你的代码效率会高很多。