我需要在我的触发器之一的Map中有一个Map。我知道如何初步构建地图,如文档所示:
Map<Id, Map<Id, Addendum__c>> addendums = new Map<Id, Map<Id, Addendum__c>>{};
但是,我在实际为多维映射赋值时遇到了问题。通常,我会使用.put()将值放入一维映射中。也许我仍然应该使用这个函数,但我永远也找不到正确的语法。
我已经尝试了以下不起作用的方法:
addendums.put(addendum.Opportunity__c, addendum.Id, addendum);
addendums.put(addendum.Opportunity__c, (addendum.Id, addendum));
有人知道怎么做吗?
谢谢!
发布于 2012-03-02 09:26:30
使用您的示例代码将会起作用,当然二级映射只能有一个条目,如果您处于可能需要更多条目的情况下,则下面的代码将为您完成此任务:
// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};
// This for loop goes through each addendum and first places it into a single dimension map.
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch])
{
if(addendums.get(addendum.Opportunity__c) == null)
{
addendums.put(addendum.Opportunity__c, new Map<Id, Addendum__c>{addendum.Id => addendum);
}
else
{
addendums.get(addendum.Opportunity__c).put(addendum.Id, addendum);
}
}正如您所看到的,在第一个映射上使用get()来获得正确的第二级映射,我们希望在其中添加一个附录。
发布于 2012-03-02 04:35:29
Josh提供的方法运行良好。如果你想删除一行代码,你可以使用以下方法:
Map<Id, Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>();
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
addendums.put(addendum.opportunity__c, new Map<Id, Addendum__c>{addendum.id => addendum});
}我不知道还有比这更有效的方法。
发布于 2012-03-02 02:46:44
我找到了一种方法来做到这一点,尽管我不确定这是否是最有效的方法。所以如果你有更好的解决方案,请让我知道,我会将“解决方案”积分转移给你。
我所做的是分配第一个地图,然后将该地图放在最终地图中。
// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};
// This for loop goes through each addendum and first places it into a single dimension map.
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
Map<Id,Addendum__c> thisAddendum = new Map<Id,Addendum__c>{ addendum.Id => addendum };
addendums.put(addendum.Opportunity__c,thisAddendum);
}https://stackoverflow.com/questions/9521740
复制相似问题