有没有一种方便的方法可以从 HashMap 的值生成一个排序数组?

LCV*_*ode 1 java arrays sorting hashmap

我有一个HashMap<CustomClass, Double>我正在循环中填充的,我想生成一个CustomClass[]按我的 HashMap 中的相应双精度排序的。

我可以通过在循环外初始化一个空的双精度数组并用我在 HashMap 中用作值的相同双精度填充它来实现这一点。循环后,我可以使用类似的东西Arrays.sort(my_doubles_array)对我的双打进行排序,然后遍历它们,比较 HashMap 值并挑选出匹配的键。这种方式有效,但这里似乎有不必要的工作。

有没有办法让我做得更好?

And*_*ner 5

使用流:

CustomClass[] array =
    map.entrySet().stream()
        .sorted(comparingDouble(Entry::getValue))
        .map(Entry::getKey)
        .toArray(CustomClass[]::new);
Run Code Online (Sandbox Code Playgroud)

没有流的替代方案:

CustomClass[] array = map.keySet().toArray(new CustomClass[0]);
Arrays.sort(array, comparingDouble(map::get));
Run Code Online (Sandbox Code Playgroud)

您可以在 Java 8 之前的版本中通过将比较器替换为匿名比较器(或类似的)来实现:

new Comparator<CustomClass>() {
  public int compare(CustomClass a, CustomClass b) {
    return Double.compare(map.get(a), map.get(b));
  }
}
Run Code Online (Sandbox Code Playgroud)