LCV*_*ode 1 java arrays sorting hashmap
我有一个HashMap<CustomClass, Double>我正在循环中填充的,我想生成一个CustomClass[]按我的 HashMap 中的相应双精度排序的。
我可以通过在循环外初始化一个空的双精度数组并用我在 HashMap 中用作值的相同双精度填充它来实现这一点。循环后,我可以使用类似的东西Arrays.sort(my_doubles_array)对我的双打进行排序,然后遍历它们,比较 HashMap 值并挑选出匹配的键。这种方式有效,但这里似乎有不必要的工作。
有没有办法让我做得更好?
使用流:
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)
| 归档时间: |
|
| 查看次数: |
34 次 |
| 最近记录: |