Java:计算 Map 中的唯一值
Java: Count unique values in a Map
在 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
或其他地方是否有我正在寻找的东西?如果没有,是否有比我上面的方法更有效的方法来获得结果?
大多数 Collection
实现的构造函数将另一个 Collection
作为参数,因此您可以将 Map
的值直接提供给 HashSet
构造函数:
int count = new HashSet<V>(myMap.values()).size();
在计算上,这与您的代码一样昂贵,但由于 Map
中的值通常不会存储在 Set
中 - 因此您无论如何都必须创建一个 Set
找到唯一计数(或者,可选地,对值进行排序,但这可能会更慢)。
您可以只使用 Collection
的 .size()
方法。
Map<K, V> myMap = ...
Collection<V> valueSet = myMap.values();
int size = valueSet.size();
Java 8 已经有一段时间了:
int count = myMap.values().stream().distinct().count();
如果您想要一个仅包含以下值的集合:
Map<K,V> myMap = ...//initiate Map;
Set<V> set = new HashSet<V>(myMap.values());
int numberUniqueB = set.size();
了解接口 Map<K,V>
,检查一下 Java MAP Documentation。
在 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
或其他地方是否有我正在寻找的东西?如果没有,是否有比我上面的方法更有效的方法来获得结果?
大多数 Collection
实现的构造函数将另一个 Collection
作为参数,因此您可以将 Map
的值直接提供给 HashSet
构造函数:
int count = new HashSet<V>(myMap.values()).size();
在计算上,这与您的代码一样昂贵,但由于 Map
中的值通常不会存储在 Set
中 - 因此您无论如何都必须创建一个 Set
找到唯一计数(或者,可选地,对值进行排序,但这可能会更慢)。
您可以只使用 Collection
的 .size()
方法。
Map<K, V> myMap = ...
Collection<V> valueSet = myMap.values();
int size = valueSet.size();
Java 8 已经有一段时间了:
int count = myMap.values().stream().distinct().count();
如果您想要一个仅包含以下值的集合:
Map<K,V> myMap = ...//initiate Map;
Set<V> set = new HashSet<V>(myMap.values());
int numberUniqueB = set.size();
了解接口 Map<K,V>
,检查一下 Java MAP Documentation。