在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
或其他地方有什么东西可以做我正在寻找的东西吗?如果没有,是否有更有效的方法来获得结果而不是我上面的方式?
答案 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