按字符串长度排序

时间:2014-04-29 03:41:27

标签: java sorting

 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”]。我只是犯了一个愚蠢的错误。

3 个答案:

答案 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()。