package com.levelup.java.collections;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Lists;
import com.google.common.collect.Multiset;
/**
* This java example will demonstrate counting the number
* of elements in a list.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/count-occurrences-in-list/'>Count occurrences in list</a>
*
*/
public class CountElementsInList {
private static final Logger logger = Logger.getLogger(CountElementsInList.class);
@Test
public void number_of_occurences_in_list_java () {
@SuppressWarnings("serial")
ArrayList<String> seussCountActivities = new ArrayList<String>() {{
add("findow");
add("Balloons");
add("Elephants");
add("Boom Bands");
add("findow");
add("Hakken-Kraks");
add("Hakken-Kraks");
add("Hakken-Kraks");
add("Elephants");
}};
Map<String, Integer> seussCount = new HashMap<String,Integer>();
for(String t: seussCountActivities) {
Integer i = seussCount.get(t);
if (i == null) {
i = 0;
}
seussCount.put(t, i + 1);
}
logger.info(seussCount);
int numberOfElephants = seussCount.get("Elephants");
assertEquals(2, numberOfElephants);
}
@Test
public void number_of_occurences_in_list_java8 () {
List<String> seussCountActivities = Lists.newArrayList(
"findow", "Balloons", "Elephants", "Boom Bands",
"findow", "Hakken-Kraks", "Hakken-Kraks",
"Hakken-Kraks", "Elephants");
long numberOfElephants = seussCountActivities
.stream()
.filter(p -> p.equals("Elephants"))
.count();
logger.info(numberOfElephants);
assertEquals(2, numberOfElephants);
}
@Test
public void number_of_occurences_in_list_guava () {
List<String> seussCountActivities = Lists.newArrayList(
"findow", "Balloons", "Elephants", "Boom Bands",
"findow", "Hakken-Kraks", "Hakken-Kraks",
"Hakken-Kraks", "Elephants");
Multiset<String> seussCount = HashMultiset.create(seussCountActivities);
int numberOfElephants = seussCount.count("Elephants");
logger.info(seussCount);
assertEquals(2, numberOfElephants);
}
@Test
public void number_of_occurence_in_list_apache_commons () {
List<String> seussCountActivities = Lists.newArrayList(
"findow", "Balloons", "Elephants",
"Boom Bands", "findow", "Hakken-Kraks",
"Hakken-Kraks", "Hakken-Kraks", "Elephants");
int numberOfElephants = CollectionUtils.countMatches(seussCountActivities, new Predicate() {
public boolean evaluate(Object arg0) {
String compare = (String) arg0;
return compare.equalsIgnoreCase("Elephants");
}
});
logger.info(numberOfElephants);
assertEquals(2, numberOfElephants);
}
}