ShowAll Questionssorted byDate Posted
Ashish Kumar

# How to count the number of occurrences of elements present in a List

Hi All,

Does anyone have any idea to how to count the number of occurrences of all the elements present in a list ? For Example, I have a list of names.
List is having 10 elements with values {A,B,C,D,A,B,A,A,A,A}. Now here A came 6 times, B came 2 times , C came 1 time and D also 1 time. But I don't know how to do it in apex.
Best Answer chosen by Ashish Kumar
Bryan James

The first thing that comes to mind is if you were to use a map and loop through your array.

List<String> nameArray = new List<String>{'A','B','C','D','A','B','A','A','A','A'};
Map<String,Integer> elCount = new Map<String,Integer>();

for(String key : nameArray)
{
if(!elCount.containsKey(key)){
elCount.put(key,0);
}
Integer currentInt=elCount.get(key)+1;
elCount.put(key,currentInt);
}

The result of this would look like:
{A=6, B=2, C=1, D=1}

If you are getting the names through a soql query you can use an AggregateResult List like this:
List<AggregateResult> ar = [Select Name, Count(Id) From SkinnyBeeCoding__Training_Seats__c Group By Name];
The result of this in my case is:
AggregateResult:{Name=Infantry July, expr0=6}, AggregateResult:{Name=Infantry June, expr0=1}​

Bryan James

The first thing that comes to mind is if you were to use a map and loop through your array.

List<String> nameArray = new List<String>{'A','B','C','D','A','B','A','A','A','A'};
Map<String,Integer> elCount = new Map<String,Integer>();

for(String key : nameArray)
{
if(!elCount.containsKey(key)){
elCount.put(key,0);
}
Integer currentInt=elCount.get(key)+1;
elCount.put(key,currentInt);
}

The result of this would look like:
{A=6, B=2, C=1, D=1}

If you are getting the names through a soql query you can use an AggregateResult List like this:
List<AggregateResult> ar = [Select Name, Count(Id) From SkinnyBeeCoding__Training_Seats__c Group By Name];
The result of this in my case is:
AggregateResult:{Name=Infantry July, expr0=6}, AggregateResult:{Name=Infantry June, expr0=1}​

This was selected as the best answer
sharathchandra thukkani
1) prepare  a set with list you have, alternatively we have set methods such as addAll which will convert list to set.
2) iterate through the set and take the list wih 10 elements as inner for loop.
3) compare each element of set with the list element and prepare a map<string,integer> where you store the count of respective elment.

sample code
//prepare set from the list.
Set<String> strSet = new Set<String>();
List<String> strList = new List<String>{A,B,C,D,A,B,A,A,A,A}
for(String str: strList ){
}
//Map
Map<String, Integer> myMap = Map<String,Integer>();
//iterate through set

for(String str: strSet){
Integer countofChar = 0;
for(String strl: strList ){
if(str == str1){
countofChar++;
}
}
myMap.put(strl, countofChar);
}
System.debug(myMap);
Vijayakumar Kumar
Thank you sharath.  Great sample.
sagar077
Hello, Please me on this requirement.

Count Account with Different Industry(on account picklist fields is there)(e,g. For Industry Electronics we have 3 Accounts) using Map.

plz help me i am new in apex collection.
Hi Bryan,
how to display element count in vf page  if I am trying to display it while click on show product method value of quantity increasing can you help me .
visualforce page i am displaying like that but problem is if i click on pagination first page,last page method is calling so value is increasing so what i need to do.

vf page
======
<input type="hidden" id='{!a.pricebookentry.Product2.name}q' value="{!elementCount[a.pricebookentry.EN_Code__c]}"/>

Apex class

============
I have added this code in method showproductdata()
elementCount=new map<string,Integer>();
List<String> filterLogicSplittedbySpace = (List<String>)System.JSON.deserialize(barcodeIn, List<String>.class);
system.debug('filterLogicSplittedbySpace'+ filterLogicSplittedbySpace.size());
for (String str : filterLogicSplittedbySpace){
system.debug('str'+str);
str =str.trim();
}
system.debug('elementList size'+elementList.size());
for(String key : elementList)
{
system.debug('elementCount.containsKey(key)'+ elementCount.containsKey(key));

if(!elementCount.containsKey(key)){
elementCount.put(key,0);
}

currentInt=elementCount.get(key)+1;
System.debug('currentInt@@'+currentInt);
elementCount.put(key,currentInt);

}