Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种方便的方法从HashMap的值生成排序数组?_Java_Arrays_Sorting_Hashmap - Fatal编程技术网

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)