java - 使用 Collections 获取 HashMap 中最大值的键

标签 java collections

<分区>

我有一个任意对象的 HashMap,带有 Double值作为值:HashMap<MyObject, Double> myMap = new HashMap<>(); .我可以获得最大值 Double HashMap 中的值使用 Collections.max(myMap.values());但我需要为该值获取相应的键。有没有一种简单的方法可以用 Collections 做到这一点? API它还是我需要一个迭代器?我考虑过获取最大值的位置,然后在 HashMap 中查询该位置并获取 key ,但我不确定该怎么做。

编辑:我可以从 HashMap 更改类型如有必要,可以更改为其他类型,但这两种类型(Object 和 Double)需要保持不变。

最佳答案

只是迭代条目集寻找最大值:

Map.Entry<MyObject, Double> maxEntry = null;
for (Map.Entry<MyObject, Double> entry : map.entrySet()) {
  if (maxEntry == null || entry.getValue() > maxEntry.getValue()) {
    maxEntry = entry;
  }
}
MyObject maxKey = maxEntry.getKey();  // Might NPE if map is empty.

或者,如果你想获得所有具有最大值的键:

double maxValue = null;
List<MyObject> maxKeys = new ArrayList<>();
for (Map.Entry<MyObject, Double> entry : map.entrySet()) {
  if (maxValue == null || maxValue.equals(entry.getValue())) {
    maxValue = entry.getValue();
    maxKeys.add(entry.getKey());
  } else if (entry.getValue() > maxValue) {
    maxValue = entry.getValue();
    maxKeys.clear();
    maxKeys.add(entry.getKey());
  }
}

关于java - 使用 Collections 获取 HashMap 中最大值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938842/

相关文章:

java - 为什么 QueryResultIterator#getCursor() 在 GAE/J 中返回 null

java - 我应该使用什么来代替已弃用的 Date.getHours()

java - 为什么不能在构造函数中同时传递集合和比较器?

java - 我如何处理 Microsoft outlook winmail.dat?还有什么惊喜吗?

java - 来自输入流的 MD5 校验和

java - Jackson 使用 Guava 的 RateLimiter 时解析异常

java - 使用 hibernate 控制叶加载父/子层次结构

java - 你推荐什么 Java Collections 库?

scala - 了解 List 中的 flatMap 声明

java - 如何编写java程序只打印字符串中的重复字符?