用数据填充两个列表

时间:2019-07-05 17:56:38

标签: salesforce apex-code salesforce-lightning

我目前正在完成rest api调用,其中包含responseOne和responseTwo。然后,我将这些响应添加到强制转换为wrapperclass的列表中。并且此列表被循环显示在vf页面上。问题是现在我需要来自responseTwo的2个字段将它们添加到我的vf页面。两个响应都与一个ID链接在一起,可以使用ID链接列表中的数据。因此,从我的responseTwo中,我需要数字和金额字段将其添加到要在vf页面上显示的responseOne列表中。我不知道如何通过将“金额”添加到我的responseOne中找到的每个特定数据中来实现这一目标。

因此,我试图在收到的两个数据集中进行循环。

for (Data.dataWrapper responseOne : listOne){
   for(Data.dataWrapper responseTwo : listTwo){
       if(responseOne.Id = responseTwo.id){
       /* i need to add the amount field from responseTwo to this specific  line of data at ID xxxx */
        }

    }

}

1 个答案:

答案 0 :(得分:0)

从性能方面考虑,这是一个糟糕的模式;它具有N*M的复杂性,因为您必须为listTwo中的每个项目遍历listOne中的每个项目。这将对您的CPU限制和界面的响应性产生负面影响。

您的包装器类通常应包含显示订单项所需的所有数据。目前尚不清楚为什么不这样做。您没有在问题中包含任何上下文。在这里,我最推荐的是将这些项目摘要到Map<Id, Data.dataWrapper>集合中:

Map<Id, Data.dataWrapper> mapTwo = new Map<Id, Data.dataWrapper>();
for (Data.dataWrapper responseTwo : listTwo) {
    mapOne.put(responseOne.Id, responseTwo);
}

然后,您可以遍历listOne并通过键入listTwo上的Map直接访问其对应的Id条目。这避免了乘法的复杂性,因为您最终只对每个列表进行了一次迭代,并且只需执行以下操作即可:

mapTwo.get(responseOne.Id); // yields corresponding responseTwo entity.

然后,您将拥有所需的数据元素,并可以对其进行消化以满足Visualforce页面的特定需求。