我有Map<String, Integer>
的地图。我需要对值进行排序并在排序后检索第一个值的键。
我做了类似Set<Integer> set = new TreeSet<>(map.values());
的事情。
现在对值进行排序,如何获取排序值中第一个元素的键。
我也欢迎更好的方法来实现这一目标。
答案 0 :(得分:2)
您可以考虑使用TreeSet<Map.Entry>
而不是TreeSet<Integer>
(使用现有地图中的entrySet
填充它),并使用Comparator<Map.Entry>
。然后在Comparator<Map.Entry>
实施中,根据值进行比较。然后你仍然拥有彼此关联的键和值。
答案 1 :(得分:0)
您的要求不明确。如果两个键映射到相同的值 - 您应该检索哪一个,该怎么办?
根据您拥有的地图,您可以做的最好的事情就是使用entrySet()
而不是values()
,它会将键与其值配对。然后,您可以按值对Entry
个对象进行排序,并检索正确的密钥。
然而,简单地将另一个Map
保持在相反的方向&#34;可能会好得多。首先。大概是你在填充第一个的同时填充这个,然后你可以使用第二个Map
快速检索&#34;键&#34;来自&#34;价值观。&#34;像这样:
Map<String, Integer> originalMap = new HashMap<String, Integer>();
Map<Integer, String> reverseLookup = new HashMap<Integer, String>();
// Populate both maps at the same time, with the same data (but reversed)...
for (Integer i : originalMap.values()) {
System.out.println(reverseLookup.get(i));
}
答案 2 :(得分:0)
如何获取排序值中第一个元素的键。
不是最有效的方法,但您可以使用已排序的Set
的第一个元素调用此方法。 此方法假设您的Map
private String getKeyForValue(Integer value, Map<String, Integer> map) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == value) {
return entry.getKey();
}
}
throw new IllegalArgumentException("The value " + value + " was not found in the map.");
}
答案 3 :(得分:0)
Map<String, Integer> map = new HashMap<String,Integer>();
Set<Integer> set = new TreeSet<Integer>(map.values());
Iterator iter = set.iterator();
Integer firstValue = (Integer) iter.next();
String firstKey = null;
for(String key : map.keySet())
{
if(map.get(key) == firstValue)
{
firstKey = key;
break;
}
}
答案 4 :(得分:-1)
使用Map.entrySet(),它包含值及其键。
答案 5 :(得分:-1)
Map<String, Integer> map = new HashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
// do your sorting
}
// fetch the first entry here
entry.getKey();