我有Map<String,String>
,其条目如“User1”,“43”。现在我想要一个最高值的“前三名”。
使用Map<String,Integer>
会更容易,但由于技术限制,我可以将地图作为<String,String>
抓取。
将<String,String>
地图转换为<String,Int>
地图然后对其进行排序的最有效方法是什么?
答案 0 :(得分:3)
要从<String, String>
转换为<String, Integer>
,您可以使用:
Map<String, Integer> treemap = new HashMap<String, Integer>();
for (Entry<String, String> entry : entries) {
treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
}
但是,您必须再次迭代Map。如果你不需要整个地图,而只需要前三个,那么你可以简单地迭代这些条目并通过比较得到前三个。
或者,如果您需要顶部元素和整个数据,则可以反转键和值并使用TreeMap<Integer, String>
和Comparator
。
答案 1 :(得分:1)
有几种方法:
与上述类似:
答案 2 :(得分:1)
您可以将值放在List中并对其进行排序:
ArrayList<Integer> highest = new ArrayList<Integer>();
for (String value : map.values()) {
highest.add(Integer.parseInt(value));
}
Collections.sort(highest);
for(int i = highest.size() - 1; i >=0 && i > highest.size()-4; i--){
System.out.println(highest.get(i));
}
如果地图非常大,可能最好迭代它,只选择3个最高值而不对整个列表进行排序。
答案 3 :(得分:0)
您可以迭代Map的值(使用Map.values()),将每个值转换为Integer(使用Integer.getInteger(String s)),并跟踪您看到的前3个。
或者,您可以按上述方式执行操作,但不要跟踪前3个,而是创建LinkedList并将每个Integer插入正确的位置(遍历LinkedList,直到找到应插入Integer的位置)。