我目前正在完成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 */
}
}
}
答案 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页面的特定需求。