我有一个类型为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
答案 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;
}