Apex:排序地图

时间:2014-08-22 12:14:03

标签: salesforce apex-code apex

我有一个类型为Sobject的Map作为键,而Integer作为值。 Sobject具有Text类型的字段,date类型的其他字段和Number(16,2)类型的另一个字段。当我将数据放入地图然后调试它时,地图以有序的方式返回数据。地图通过Key中存在的Number字段(即对象的数字数据字段)对其进行排序。我可以按照对象的日期字段对其进行排序吗?下面是我的Map的粗略结构和关键对象字段。

 Map<Effort_Allocation__c, Double> cellContent;
 Effort_Allocation__c.Allocated_Effort_Hours__c; //The Number field by which the map gets sorted
 Effort_Allocation__c.Assignment_Date__c; // The date field by which I want the map to get sorted

1 个答案:

答案 0 :(得分:0)

将对象用作地图的关键字是个坏主意。相反,您应该使用对象的ID作为键。详细讨论了here的原因。简短版本 - 对象的值可能会更改,这会更改对象的哈希值并破坏您的地图。

虽然无法直接对地图进行排序,但可以对列表进行排序,因此可以使用它们按排序顺序访问地图元素。您需要一个实现“Comparable”接口的对象的包装类。有一个here的例子。请注意,该示例按日期排序。

该类声明为“可比较”

global class AccountHistoryWrapper implements Comparable{

并具有以下CompareTo方法

global Integer compareTo(Object compareTo) {

// Cast argument to AccountHistoryWrapper
AccountHistoryWrapper aHW = (AccountHistoryWrapper)compareTo;

// The return value of 0 indicates that both elements are equal.
Integer returnValue = 0;

if ( aHW.account.CreatedDate > aHW.account.CreatedDate) {
// Set return value to a positive value.
returnValue = 1;
} else if ( aHW.account.CreatedDate < aHW.account.CreatedDate) {
// Set return value to a negative value.
returnValue = -1;
}

return returnValue;
}