String[] arrays = {"AA", "B"};
Arrays.sort(arrays, (s1, s2)->s1.length()-s2.length());
System.out.println(Arrays.toString(arrays));
这是我对jdk 8环境的测试。当s1.length()大于s2.length()时,比较器返回一个负数,因此s1位于s2的前面。但结果是[“B”,“AA”]。怎么了?
当s1.length()大于s2.length()时,比较器返回正数字,因此s2位于s1前面。结果是[“B”,“AA”]。我只是犯了一个愚蠢的错误。
答案 0 :(得分:2)
o1 - object1 in your case s1
o2 - object2 in your case s2
比较方法工作并以这种方式返回
-1 : o1 < o2
0 : o1 == o2
+1 : o1 > o2
在您的情况s1 < s2
中,因此它返回-1,因此它按升序排序先变小然后再变大。
public int compare(String s1, String s2) {
System.out.println(s1);
System.out.println(s2);
return s1.length() - s2.length();
}
O / P
B
AA
[B, AA]
在下面的情况下,如果我们反转返回参数如下
public int compare(String s1, String s2) {
System.out.println(s1);
System.out.println(s2);
return s2.length() - s1.length();
}
它返回正数,因此先按降序排序先变大,然后变小。
和o / p是
B
AA
[AA, B]
现在只返回0
public int compare(String s1, String s2) {
System.out.println(s1);
System.out.println(s2);
return s2.length() - s2.length();
}
o / p - 没有排序,因为它假设所有即将到来的对象都是相同的。
B
AA
[AA, B]
让我知道任何问题。
答案 1 :(得分:1)
让我们修改它以记录值
String[] arrays = { "AA", "B" };
Arrays.sort(arrays, (s1, s2) -> {
System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
return s1.length() - s2.length();
});
System.out.println(Arrays.toString(arrays));
打印
s1: B
s2: AA
[B, AA]
B
的长度小于AA
,所以
return s1.length() - s2.length();
返回负值。 sort
方法接受并在数组中翻转它们。
答案 2 :(得分:0)
逻辑是落后的。听起来你想从s2.length()中减去s1.length()。