Java 是否有一种方便的方法从HashMap的值生成排序数组?
我有一个Java 是否有一种方便的方法从HashMap的值生成排序数组?,java,arrays,sorting,hashmap,Java,Arrays,Sorting,Hashmap,我有一个HashMap,我正在一个循环中填充它,我想生成一个CustomClass[],它按照HashMap中相应的双精度排序 我可以通过在循环外初始化一个空的double数组,并用我在HashMap中用作值的double填充它来实现这一点。循环之后,我可以使用类似于array.sort(my\u doubles\u array)的方法对我的double进行排序,然后遍历它们,比较HashMap值并挑选匹配的键。这种方法可行,但这里似乎有不必要的工作 有什么方法可以做得更好吗?使用流: Cust
HashMap
,我正在一个循环中填充它,我想生成一个CustomClass[]
,它按照HashMap中相应的双精度排序
我可以通过在循环外初始化一个空的double数组,并用我在HashMap中用作值的double填充它来实现这一点。循环之后,我可以使用类似于array.sort(my\u doubles\u array)
的方法对我的double进行排序,然后遍历它们,比较HashMap值并挑选匹配的键。这种方法可行,但这里似乎有不必要的工作
有什么方法可以做得更好吗?使用流:
CustomClass[] array =
map.entrySet().stream()
.sorted(comparingDouble(Entry::getValue))
.map(Entry::getKey)
.toArray(CustomClass[]::new);
没有溪流的替代方案:
CustomClass[] array = map.keySet().toArray(new CustomClass[0]);
Arrays.sort(array, comparingDouble(map::get));
在Java 8之前的版本中,可以使用匿名比较器(或类似的比较器)替换比较器:
新比较器(){
公共整数比较(自定义类别a、自定义类别b){
返回Double.compare(map.get(a),map.get(b));
}
}
使用流:
CustomClass[] array =
map.entrySet().stream()
.sorted(comparingDouble(Entry::getValue))
.map(Entry::getKey)
.toArray(CustomClass[]::new);
没有溪流的替代方案:
CustomClass[] array = map.keySet().toArray(new CustomClass[0]);
Arrays.sort(array, comparingDouble(map::get));
在Java 8之前的版本中,可以使用匿名比较器(或类似的比较器)替换比较器:
新比较器(){
公共整数比较(自定义类别a、自定义类别b){
返回Double.compare(map.get(a),map.get(b));
}
}
当然Comparator.comparingDouble(Map.Entry::getValue)
当然Comparator.comparingDouble(Map.Entry::getValue)