在 aMap<K,V>我想知道有多少唯一值V。有没有类似的东西getValueSet()可以让我得到这个集合的大小?在伪代码中:
Map<K,V> myMap = ...//initiate Map;
Set<V> valueSet = myMap.getValueSet()
int numberUniqueB = valueSet.size();
Run Code Online (Sandbox Code Playgroud)
不幸的是没有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();
Run Code Online (Sandbox Code Playgroud)
但这似乎是我在重新发明轮子。是否有什么Collections地方或其他地方已经做了我正在寻找的东西?如果没有,是否有比我上面的方法更有效的方法来获得结果?
Java 8 已经问世有一段时间了:
int count = myMap.values().stream().distinct().count();
Run Code Online (Sandbox Code Playgroud)
大多数Collection实现的构造函数都将另一个Collection作为参数,因此您可以将 的值Map直接提供给HashSet构造函数:
int count = new HashSet<V>(myMap.values()).size();
Run Code Online (Sandbox Code Playgroud)
在计算上,这与您的代码一样昂贵,但由于 aMap中的值通常不存储在 a 中Set- 因此您必须创建 aSet来查找唯一计数(或者,可选地对值进行排序,但这可能会更慢)。