You need to sign in to do that
Don't have an account?
jgrenfell
Iterating through a Map, Value Order
I have a trigger where I create a Map of SObjects using a query that includes an ORDER BY statement. My hope was that the values in the map would then be in the same order as the results of the query, but when I iterate through them, that's not the case. Any way to set the order of the values in a map, or do I need to accomplish this differently?
My code, for reference:
Code:
My code, for reference:
Code:
//Get map of statuses for participants Map<Id, Status_Milestone__c> statMap = new Map<Id, Status_Milestone__c>( [select Id, Participant__c, Category__c, Sub_Category__c, Status_Milestone__c, Effective_Date__c from Status_Milestone__c where Participant__c IN :partIds and (Sub_Category__c = 'Reinstated - Redevelopment' or Sub_Category__c = 'Reinstated') ORDER BY Effective_Date__c ASC]); //Since this is sorted by date, the last reinstatement status hit should be the most recent for (Id statId:statMap.keySet()){ cat = statMap.get(statId).Category__c; part = statMap.get(statId).Participant__c; if (part == Trigger.new[i].Participant__c && cat == 'Active, Post-Placement Services') { booPost = true; } else { //reset to false just in case there are multiple reinstatements booPost = false; } }
Apex uses a hash structure for all maps.
So, based on your observation and this note in the doc, I'd say that a Map is not an ordered set, rather is a hashed collection designed for access by key.
I believe a List will preserve the order of records in the SOQL.
You could create list, then walk thru the list and create a map, allowing for access of your data by order or key.