Map(映射)是一种数据结构,用于存储键值对。
在Salesforce的Apex编程语言中,Map是一种集合数据类型,用于存储一组唯一键(Key)和每个键关联的值(Value)。
在Apex中,你可以这样初始化一个Map,并且添加或访问元素:
Map<String, Integer> scoreMap = new Map<String, Integer>(); //初始化声明
scoreMap.put('Math', 70); //添加元素
scoreMap.put('Math', 90); //※put方法不仅可以用于插入新值,还可以用于更新现有的键值对。
scoreMap.put('English', 85);
Integer mathScore = scoreMap.get('Math'); // 取得元素值,返回 90
scoreMap.remove('Math'); //删除元素
进阶用法
1.初始化声明的同时,使用映射符填充元素
Map<String, Integer> myMap = new Map<String, Integer>{'key1'=>1, 'key2'=>2};
2.SOQL查询直接填充Map
Map<Id, Account> accountMap = new Map<Id, Account>([SELECT Id, Name FROM Account WHERE SomeField__c = :someValue]);
3.使用keySet和values方法
当需要处理所有键或所有值时,使用这些方法非常有用。
Set<String> keys = myMap.keySet();
List<Integer> values = myMap.values();
4.使用containsKey()判断元素是否存在
Map<String, Integer> scoreMap = new Map<String, Integer>();
scoreMap.put('Math', 90);
scoreMap.put('English', 85);
// 检查'Math'是否为有效的键
if (scoreMap.containsKey('Math')) {
System.debug('Math score exists: ' + scoreMap.get('Math'));
} else {
System.debug('Math score does not exist.');
}
5.使用get方法与null检查
当你尝试获取Map中不存在的键值时,使用get方法将返回null,这样你就可以避免使用containsKey进行额外检查。
Integer value = myMap.get('someKey');
if(value != null) {
// Do something
}
6.批量处理
如果你有一个Id列表(例如,从触发器中获取),并且你想得到这些Id对应的对象,你可以一次性用这些Id填充Map。
List<Id> ids = new List<Id>{'001...', '002...'}; // example Ids
Map<Id, Account> accounts = new Map<Id, Account>([SELECT Id, Name FROM Account WHERE Id IN :ids]);
7.使用putAll()合并Maps
Map<String, Integer> map1 = new Map<String, Integer>{'a'=>1, 'b'=>2};
Map<String, Integer> map2 = new Map<String, Integer>{'c'=>3};
map1.putAll(map2);
以上,欢迎补充!