As a developer most of the times we will be working on collections.One of the most common used collection in salesforce is maps.
Creating a simple maps(value as a string,integer,object etc..) is very easy
OutPut:
Please watch this space more useful stuff.
Please follow,bookmark,subscribe this site to receive daily updates.
Facebook - https://www.facebook.com/ILoveCodingYou/?ref=bookmarks
Creating a simple maps(value as a string,integer,object etc..) is very easy
- Map<String,String>
- Map<String,Integer>
- Map<key,objects>
The real picture comes into scenario when we want to build some complex maps(where value of a map it self again a collection like list,set etc)
- Map<String,list<Account>>
- Map<integer,set<integer>>
- Map<AccountId,list<Conatct>>
Most common mistakes that we do while building this complex maps are
- Old value gets overrides by new values.
- When your in loop you map always ends up with just holding the last record in list/set.
- Didn't checking whether value is already is exist or not.
Scenario:
Let take a take I want to create a map which will takes case status as key and it's value is all the cases comes under the same status.
Map<String,List<Case>> mapStatusToCases = new Map<String,List<Case>>() for( Case cs: [SELECT id,Status,CaseNumber FROM Case limit 20]) { //Check whether with same status any record is already is added to map or not if(mapStatusToCases.containsKey(cs.Status)) { // If you directly put this case into the map it will overrides all the existing cases, // which is not correct.So get all the existing records and store it list/set. List<Case> existingCase = mapStatusToCases.get(cs.Status); //add this new record to existing list existingCase.add(cs); // now put the same status into the map with all latest case records(existing+new), // because key is same so it will overrides existing values with this latest list mapStatusToCases.put(cs.Status,existingCase); } else // this executes if the status is not there in map(it means coming first time) { //prepare variable of map value type List<case> lstNewCases = new List<Case>(); // adding a new record lstNewCases.add(cs); // add the new status as a key and case as a value into map mapStatusToCases.put(cs.Status,lstNewCases); } } System.debug('All Key Set...'+mapStatusToCases.keySet()); System.debug('All Values in Map...'+mapStatusToCases.values()); System.debug('Complete Map Details...'+mapStatusToCases);
For better understanding in above I have written each statement in a separate line. The same code can also be written in an optimized way as shown below.Both are valid and same.
Map<String,List<Case>> mapStatusToCases = new Map<String,List<Case>>() for( Case cs: [SELECT id,Status,CaseNumber FROM Case limit 20]) { //Check whether with same status any record is already is added to map or not if(mapStatusToCases.containsKey(cs.Status)) { //this statement mapStatusToCases.get(cs.Status) will returns the list //So,I'm adding new record to existing list directly mapStatusToCases.get(cs.Status).add(cs); } else // this executes if the status is not there in map(it means coming first time) { //Delcared a new list and directly adding a new record to that mapStatusToCases.put(cs.Status,new List<Case>{cs}); } } System.debug('All Key Set...'+mapStatusToCases.keySet()); System.debug('All Values in Map...'+mapStatusToCases.values()); System.debug('Complete Map Details...'+mapStatusToCases);
OutPut:
Please watch this space more useful stuff.
Please follow,bookmark,subscribe this site to receive daily updates.
Facebook - https://www.facebook.com/ILoveCodingYou/?ref=bookmarks
Hope this helps you..Enjoy..!
92E01AE111
ReplyDeletemmorpg oyunlar
sms onay siteleri
mobil ödeme bozdurma
tiktok güvenilir takipçi satın alma
türk takipçi
313A19E356
ReplyDeletekiralık hacker
hacker bulma
tütün dünyası
hacker bulma
hacker kirala
90B47C5D8A
ReplyDeleteTakipçi Satın Al
Footer Link Satın Al
Online Oyunlar
PK XD Elmas Kodu
Avast Etkinleştirme Kodu