Salesforce Collections
Collections are the group of similar types. There are three types of Salesforce collections. They are
- List
- Set
- Map
List
List is an ordered collection of elements which will allow duplicates. A list is an ordered collection of typed primitives SObjects, user-defined objects, Apex objects or collections that are distinguished by their includes.
- The index position of the first element in a lsit is always ‘0’.
- To declare a list, use the list. keyword followed by the primitive data, SObject, nested list, map, or set type within <>characters.
Syntax
List<datatype> listName = new List<datatype>();
where datatype
allows both primitive datatypes and non-primitive datatypes.
The size of a list changes dynamically when items are added to the list or removed from the list.
List Methods
Add
list.add() method adds the values (items) to the list.
List<String> colors =new List<String>();
colors.add('Red');
colors.add('White');
colors.add('Black');
or, you can add the items in a single statement as shown below:
List<String> colors =new List<String>{'Red','White','Black'}
Get
list.get(index) retrieves value from list present at index position.
String getcolor = colors.get(1); // we get the value is 'White' in to getcolor veriable.
Set
list.set(index, value) replaces a former value with the specified value at the given index.
colors.set(1,'Green'); // List has value at index ' 1 ' is White is changed to Green.
Size
list.size() return the number of elements in the list.
colors.size(); // Gives the size of colors list is '2'
Clear
Remove the elements from the list.
colors.clear();
Example Inserting 100 contacts in contacts object
public class ContactInsertion {
List<contact> contactList = new List<contact>();
public void methodName() {
for(integer i=0; i<100 ; i++ ) {
contact cont = new contact(lastname = 'contact' + i);
contactList .add(cont);
}
insert contactList ;
}
}
Go through this reference for the more list methods.
Set
Set is an unordered collection of elements which will not allow duplicates. A set is an unordered collection of primitives or SObjects that do not contain any duplicate elements.To declare a set, use the set keyword followed by the primitive data type name within < > characters
Syntax
Set<datatype> setName = new Set<datatype>();
- data type allows only primitive datatypes and SObjects.
- We cannot get the retrieve the data based on index because set does not have index.
Go through this reference, for the all variations of set methods.
Example:-
set <string> s= new set < string > ();
To access elements in a set use the system methods provided by Apex.
<Integer> s=new set <Integer>(); => Define a new set
S.add (1); => Adding an element to the set
Boolean b= s.contains(1); => It will returns true when the element‘1’ contains within the set.
s.remove (1); => Remove the element from the set.
Map
Map stores key-value pairs. A map is a collection of key-value pairs where each unique key maps to a single value. Keys can be any primitive datatype while values can be primitive, sobject, collection type or Apex object.
- To declare a map, use the Map keyword followed by the data types of the value within < > characters
Syntax
Map<datatype_key,datatype_value> mapName = new Map<datatype_key,datatype_value>();
datatype_key
is the storage datatype of key and it allows only primitive datatypes and should be unique.datatype_value
is the datatype of value. Both primitive & non-primitive datatypes are allowed. Duplicates are allowed for values.
Example:-
Map < string, string> m=new map <string, string> ();
Note:- Similar to lists, map values can contain any collection and can be nested within one another. A map can only contain up to five levels of nested collections inside it.
Map Methods
put()
Insert a key-value pair or replaces a value with the given value for the key.
map.put(key,value);
get()
Retrieves the value for a key.
map.get(key);
keySet()
Retrieves all the keys and return type is set;
map.keySet();
values()
Retrieves all the values and return type is list;
map.values();
size()
Return the number of components in the map.
map.size();
Example to Create a map of Account Ids and Account objects
public class AccountMapPopulation{
// Creating map with account id and account object
map <Id,Account> accountIdMap =new map<Id,Account>();
public void methodName(){
// creating the accounts
account acc1 = new account (name ='account1' , industry = ' Banking');
account acc2 =new account(name =' account2' , industry = 'Agriculture');
account acc3 = new account(name='account3' , industry='Banking');
// populating the map with account id and account object
accountIdMap .put(acc1.id,acc1);
accountIdMap .put(acc2.id,acc2);
accountIdMap .put(acc3.id,acc3);
}
}
Go through this reference for the more map methods.
This post is very good. Good information about salesforce collection, very helpful ti me. A big thanks to salesforcetutorial.com
By vanaja
Thank u soo much it is very useful..
This post is very nice. Good information about salesforce collections, very helpful to me. A big thanks to salesforcetutorial.com
Hi This Material is very useful to all. I have a doubt, shell we insert records by using set. if yes give me some example…
Thanks a lot… Nice material very easy to understand. If possible share more examples.
While executing below function I am getting method does not exist or invalid signature, please help to solve,
executed in developer console : lessone.aaaaza();
public class lessone{
Invoice__c myinvs = New Invoice__c();
public void aaaaza(){
Map m = new Map();
m.put(1,myinvs);
system.debug(‘getmm’+m.get(1));
}
}
hi.
the first mistake you did was you did not created the instance for the class since the method is not a static.
then in the map, you did not mapped the data types.
copy paste my below code:
public class tutorial1
{
Invoice__c myinvs = New Invoice__c(status__c=’open’);
public void aaaaza(){
Map m = new Map();
m.put(1,myinvs);
system.debug(‘getmm’+m.get(1));
}
}
In developer console:
tutorial1 tut = new tutorial1();
tut.aaaaza();
try this one and let me know if you still facing any issues. I will help you.
hi fernando,
sorry copy paste the below code:
public class tutorial1 {
Invoice__c myinvs = New Invoice__c(status__c=’open’);
public void aaaaza(){
Map m = new Map();
m.put(1,myinvs);
system.debug(‘getmm’+m.get(1));
}
}