如何从值中获取java.util.map的键

如何从值中获取java.util.map的键,java,sorting,map,Java,Sorting,Map,我有一张地图。我需要对值进行排序,并在排序后检索第一个值的键 我做了如下设置:Set=newtreestmap.values;。 现在值已排序,如何获取排序值中第一个元素的键 我也欢迎一个更好的实现方式。 使用Mava. EngySt集,它包含了值和它们的键。 可以考虑TeSESET而不是TeSESET,用现有的映射中的CexySt填充它,并使用比较器。然后在比较器实现中,根据值进行比较。然后您仍然拥有相互关联的键和值。您的需求定义不清。如果两个键映射到同一个值,您应该检索其中哪一个 Map&l

我有一张地图。我需要对值进行排序,并在排序后检索第一个值的键

我做了如下设置:Set=newtreestmap.values;。 现在值已排序,如何获取排序值中第一个元素的键


我也欢迎一个更好的实现方式。

使用Mava. EngySt集,它包含了值和它们的键。

可以考虑TeSESET而不是TeSESET,用现有的映射中的CexySt填充它,并使用比较器。然后在比较器实现中,根据值进行比较。然后您仍然拥有相互关联的键和值。

您的需求定义不清。如果两个键映射到同一个值,您应该检索其中哪一个

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();
在给定映射的情况下,最好使用entrySet而不是value,这将键与其值配对。然后可以按值对条目对象进行排序,并检索正确的键

然而,如果一开始就把另一张地图放在相反的方向上,可能会好得多。假设您将在填充第一个映射的同时填充此映射,然后可以使用第二个映射从值中快速检索键。大概是这样的:

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));
}
如何获取排序值中第一个元素的键

这不是最有效的方法,但您可以使用排序集的第一个元素调用此方法。此方法假定映射中有非空值


为什么OP要在循环中进行排序?这只是使用Map.Entry的一个示例。其他的一切都不重要,这里只是展示一个例子。但是你无法区分哪一个是第一个值的键,因为这些值是在从地图中取出后排序的,对吗?你无法区分相等的值,但除此之外,你可以在集合上迭代,直到找到你的值!?如何同时使用Comparator和entrySet,因为TreeSet的构造函数只能使用其中一种方法。测试:使用Comparator进行构造,然后在增强的for循环中重复从entrySet添加。例如,在构造Map.Entry:originalMap.entrySet{treeSet.addentry;}之后,您希望如何处理一个值映射到多个键的情况?在映射中,键保证是唯一的,但值不是唯一的。
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.");
}
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;
  }
}