如何遍历哈希映射以查找前 10 个元素,例如,如果我的映射包含字符串作为键和 int 作为值,我想获取具有最高整数的前 10 个值?
问问题
130 次
3 回答
1
假设我们有Map
并且我们被允许使用外部库 - Guava:
Map<String, Integer> map = Maps.newTreeMap();
map.put("A", 13);
map.put("B", 11);
map.put("C", 27);
map.put("D", 38);
map.put("E", 25);
map.put("F", 12);
map.put("G", 25);
map.put("D", 35);
map.put("H", 28);
map.put("R", 13);
map.put("N", 24);
map.put("T", 37);
创建 GuavaMultiMap
并添加原始条目map
Multimap<String, Integer> multiMap = ArrayListMultimap.create();
for(String key : map.keySet()){
multiMap.put(key, map.get(key));
}
反转multiMap
并复制到TreeMultiMap
TreeMultimap<Integer, String> reversed = TreeMultimap.create();
Multimaps.invertFrom(multiMap, reversed);
从条目创建List
并获取前 10 个元素:
Lists.newArrayList(reversed.entries()).subList(0,10)
于 2013-09-27T22:56:26.290 回答
0
如果它是一次性的,您可以通过转换为 List 然后返回 LinkedHashMap 来对 HashMap 进行排序:
Map<String, Integer> map = new HashMap<>();
map.put("A", 13);
map.put("B", 11);
map.put("C", 27);
map.put("D", 38);
map.put("E", 25);
map.put("F", 12);
map.put("G", 25);
map.put("D", 35);
map.put("H", 28);
map.put("R", 13);
map.put("N", 24);
map.put("T", 37);
// Take a List copy of the Map
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(map.entrySet());
// Sort the list by the Value
Collections.sort(list, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
// Create new Map (use LinkedHashMap to maintain order)
Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
for (Entry<String, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
于 2016-10-07T12:39:00.160 回答
-1
大多数 HashMap 不保留任何顺序,因此您可能需要读取所有键,对它们进行排序,然后从 Hash 中获取相应的值。如果您能告诉我们是什么语言并提供一些示例代码,那么有人可能会提供进一步的帮助。
于 2013-09-27T21:29:48.193 回答