[英]Iterating through HashMap by values
我需要遍历HashMap,但要重视值的顺序。 例如,考虑以下<String, Integer>
哈希映射:
{"dog" : 2, "bird": 3, "cat" : 1}
现在,我需要按升序循环遍历hasp映射,以便
for () {
System.out.println( currentKey );
}
将始终输出
“猫”,“狗”,“鸟”
好吧,您可能对使用TreeMap感兴趣,它使用键对您的条目进行排序。
否则,您可能有兴趣查看Map.keySet() , Map.entrySet()或Map.values() 。
如果仍然想让地图保持为HashMap,则可以使用Collections的众多功能之一来获取排序的集合(例如,可以获取地图的排序版本,对列表进行排序等)。
因为我看到您特别想按值排序,所以我认为MichałMinicki的答案应该是您想要的。
也许这会有所帮助:
如果您想让地图在插入条目时按值对自身进行排序,那么最简单的方法可能是使用Google收藏库中的TreeMultimap之类的东西。
如果您仍然想使用哈希图,但是在从集合中检索值时对值进行了排序,则可以采用两种方法-可以使用values()方法获取值,然后在工具集上运行Collections.sort()返回列表,或者您可以再次使用TreeMultimap之类的类,将所有条目添加到当前哈希图中,然后对它们进行枚举。
使用Guava的另一个示例:
优点:
Comparable
static <K, V>Set<Map.Entry<V, K>>
entriesByValue(Map<K, V> source, Comparator<V> cmp) {
SortedMap<V, Collection<K>> inverseMap = Maps.newTreeMap(cmp);
Supplier<Set<K>> setFactory = new Supplier<Set<K>>() {
public Set<K> get() {
return Sets.newHashSet();
}
};
SetMultimap<V, K> inverseMM =
Multimaps.newSetMultimap(inverseMap, setFactory);
Multimaps.invertFrom(Multimaps.forMap(source), inverseMM);
return Collections.unmodifiableSet(inverseMM.entries());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.