Java:计算Map中的唯一值

时间:2015-02-27 01:14:33

标签: java dictionary

Map<K,V>我想了解V有多少个唯一值。是否有getValueSet()这样的东西,以便我可以得到这个集合的大小?在伪代码中:

Map<K,V> myMap = ...//initiate Map;
Set<V> valueSet = myMap.getValueSet()
int numberUniqueB = valueSet.size();

不幸的是,没有getValueSet方法。或者,我可以像这样自己遍历列表:

Set<V> mySet = new HashSet<V>();
    for(Map.Entry<K,V> entry : myMap.entrySet()){
    V value = entry.getValue();
    mySet.add(value);
    }
int countUniqueB = mySet.size();

但这似乎是我重新发明轮子。在Collections或其他地方有什么东西可以做我正在寻找的东西吗?如果没有,是否有更有效的方法来获得结果而不是我上面的方式?

4 个答案:

答案 0 :(得分:4)

大多数Collection实现的构造函数将另一个Collection作为参数,因此您可以将Map的值直接提供给HashSet构造函数:

int count = new HashSet<V>(myMap.values()).size();

在计算上,这与您的代码一样昂贵,但由于Map中的值通常不会存储在Set中,因此您无论如何都必须创建Set唯一计数(或者,可选地,对值进行排序,但这可能会更慢)。

答案 1 :(得分:2)

Java 8现在已经有一段时间了:

int count = myMap.values().stream().distinct().count();

答案 2 :(得分:0)

如果您想要一个仅包含值的集合:

Map<K,V> myMap = ...//initiate Map;
Set<V> set = new HashSet<V>(myMap.values());
int numberUniqueB = set.size();

了解界面Map<K,V>,请查看Java MAP Documentation

答案 3 :(得分:-1)

您可以使用.size()的{​​{1}}方法。

Collection