function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Ashish KumarAshish 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.
Please help how can I get the count of repeated values in apex.
Best Answer chosen by Ashish Kumar
Bryan JamesBryan 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}​

All Answers

Bryan JamesBryan 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 thukkanisharathchandra 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 ){
strSet.add(str);
}
//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 KumarVijayakumar Kumar
Thank you sharath.  Great sample.  
sagar077sagar077
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.
Ashish Kumar YadavAshish Kumar Yadav
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();
                        elementList.add(str);
                    }
                    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);
                        
                    }
Ashish Kumar YadavAshish Kumar Yadav
how to display in vf page element count i am facing problem.