Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 Comparator.Comparating不进行比较?_Java_Sorting - Fatal编程技术网

Java Comparator.Comparating不进行比较?

Java Comparator.Comparating不进行比较?,java,sorting,Java,Sorting,接下来,我将一个列表按另一个列表排序,我尝试做同样的事情——但出于某种原因,这对我不起作用。我错过了什么 List<Double> nums = Arrays.asList(5.0, 0.9, 10.4); List<Double> order = Arrays.asList(3.0, 1.0, 2.0); nums.sort(Comparator.comparing(order::indexOf)); System.out.println

接下来,我将一个列表按另一个列表排序,我尝试做同样的事情——但出于某种原因,这对我不起作用。我错过了什么

    List<Double> nums = Arrays.asList(5.0, 0.9, 10.4);
    List<Double> order = Arrays.asList(3.0, 1.0, 2.0);
    nums.sort(Comparator.comparing(order::indexOf));
    System.out.println(nums);

    OUTPUT: [5.0, 0.9, 10.4]
List nums=Arrays.asList(5.0,0.9,10.4);
列表顺序=Arrays.asList(3.0,1.0,2.0);
nums.sort(Comparator.comparing(order::indexOf));
系统输出打印项次(nums);
输出:[5.0,0.9,10.4]
它应该是[0.9,10.4,5.0](根据
顺序)。我做得不对的是什么


编辑:正如你们大多数人所注意到的,我对我链接到的问题的答案全错了

您正在按编号在
顺序
列表中的位置对编号进行排序,但没有一个编号出现在顺序列表中。在这种情况下,对于一切,意味着一切都是平等的。在这种情况下,生成的排序顺序是未指定的-尽管您可以实际地假设它不会改变。

对于每个传递的
num
调用
indexOf
的比较器。 所有调用的返回值都是
-1
,因此顺序保持不变

你需要自然分类


应该可以按另一个双精度
列表进行排序,但不必要地复杂,提供一个自定义对象来根据需要进行排序会更简单。

更新

List nums=Arrays.asList(5.0,0.9,10.4);
列表顺序=Arrays.asList(3.0,1.0,2.0);
Map numToOrder=newhashmap();
对于(int i=0;inumToOrder.get(num));
系统输出打印项次(nums);
原始(错误)答案

(nums就地修改,lambda返回键返回错误结果)

List nums=Arrays.asList(5.0,0.9,10.4);
列表顺序=Arrays.asList(3.0,1.0,2.0);
sort(Comparator.comparing(num->order.get(nums.indexOf(num)));
系统输出打印项次(nums);

您可以创建一个配对列表:

[3.0, 5.0]
[1.0, 0.9]
[2.0, 10.4]
然后根据每个数组的第一个值对该对列表进行排序:

[1.0, 0.9]
[2.0, 10.4]
[3.0, 5.0]
代码如下:

List<Double> nums = Arrays.asList(5.0, 0.9, 10.4);
List<Double> order = Arrays.asList(3.0, 1.0, 2.0);

List<Double[]> pairs = new ArrayList<>();
for (int i = 0; i < nums.size(); i++) {
    pairs.add(new Double[] {order.get(i), nums.get(i)});
}

pairs.sort(Comparator.comparing(pair -> pair[0]));

for (Double[] pair : pairs) {
    System.out.print(pair[1] + " ");
}

哦,所以我全错了。。那么如何按顺序对
nums
进行排序呢?@Michael我相信使用
order
作为排序键。@shakedzy我想补充一点,比较器不能满足
比较器的要求。这意味着不仅排序顺序未指定,而且排序方法可能引发异常
ArrayList
例如
AssertionError
。只是为了好玩,我玩了
ArrayList
和不同的有缺陷的比较器。我从未得到过总是返回-1的比较器异常,也从未得到过
AssertionError
s。然而,对于返回随机整数的比较器,我经常得到。(当然,所有这些都是未指定的且依赖于实现的,因此在JRE:s和版本之间可能会有所不同。)要使其正常工作,每个
nums
元素必须按
顺序存在,
刚刚对此进行了审核失败。。。我不明白编辑部分是如何被接受的。
0.9 10.4 5.0