TrackingMultimap extends AbstractMap<K, Set<V>> { public long count() { return totalValueCount.get(); } protected  TrackingMultimap(Map<K, Set<V>> delegate,
            @Nullable Comparator<K> comparator); boolean containsDataType(DataType type); long count(); boolean delete(K key, V value); double distinctiveness(); @Override Set<Entry<K, Set<V>>> entrySet(); @SuppressWarnings("unchecked") @Override boolean equals(Object obj); @Override Set<V> get(Object key); @Override int hashCode(); boolean hasValue(V value); boolean insert(K key, V value); K max(); Set<V> merge(K key, Set<V> values); K min(); double percentKeyDataType(DataType type); double proportion(K element); @Override Set<V> put(K key, Set<V> value); @SuppressWarnings("unchecked") @Override Set<V> remove(Object key); double spread(); @Override String toString(); double uniqueness(); VariableType variableType();  }
@Test public void testCount() { TrackingMultimap<String, Integer> tmmap = (TrackingMultimap<String, Integer>) map; tmmap.put("a", Sets.newHashSet(1, 2, 3)); tmmap.put("b", Sets.newHashSet(1, 2, 3)); tmmap.put("c", Sets.newHashSet(1, 2, 3, 4)); AtomicInteger count = new AtomicInteger(0); tmmap.forEach((key, values) -> { count.addAndGet(values.size()); }); Assert.assertEquals(tmmap.count(), count.get()); }