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”]。我只是犯了一个愚蠢的错误。
最佳答案
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]
如有任何问题请告诉我。
关于java - 按字符串长度排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355042/