package com.levelup.java.collections; import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import org.junit.Before; import org.junit.Test; import com.google.common.base.Predicate; import com.google.common.collect.Maps; /** * This java example will demonstrate counting the number * of keys or values in a map. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/count-occurrences-key-or-value-in-map/'>Count number of keys or values in hashmap</a> * */ public class CountKeyOrValuesMap { Map<Integer, String> MONTHS = new HashMap<Integer, String>(); @Before public void setUp() { MONTHS.put(new Integer(1), "January"); MONTHS.put(new Integer(2), "February"); MONTHS.put(new Integer(3), "March"); MONTHS.put(new Integer(4), "April"); MONTHS.put(new Integer(5), "May"); MONTHS.put(new Integer(6), "June"); MONTHS.put(new Integer(7), "July"); MONTHS.put(new Integer(8), "August"); MONTHS.put(new Integer(9), "September"); MONTHS.put(new Integer(10), "October"); MONTHS.put(new Integer(11), "November"); MONTHS.put(new Integer(12), "December"); } @Test public void count_value_in_map_using_java8() { Map<Integer, String> monthsStartWith_M = MONTHS.entrySet().stream() .filter(p -> p.getValue().startsWith("M")) .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); assertEquals(2, monthsStartWith_M.size()); } @Test public void filter_map_by_value_entries_guava() { Predicate<Map.Entry<Integer, String>> monthLenthFour = new Predicate<Map.Entry<Integer, String>>() { @Override public boolean apply(Entry<Integer, String> input) { return input.getValue().length() == 4; } }; Map<Integer, String> monthsWithLengthFour = Maps.filterEntries(MONTHS, monthLenthFour); int count = monthsWithLengthFour.size(); assertEquals(2, count); } }