java - 按字符串长度排序

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

最佳答案

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/

相关文章:

java - 如何在android/java中使用recyclerview和picasso显示图像?

c++ - 如何使用 C++ 将数组按字母顺序排序为新数组?

c++ - 为什么我的程序在选择排序功能后暂停?

java - 使用 Collections.sort() 对 MP3 列表进行排序

java - 编辑距离代码中的 NZEC

java - 如何更改音频文件的播放速率?

java - 为什么这个自定义 sortarray 函数无法对数组进行排序?

ios - 如何按日期排序获取请求而不需要时间 - Swift 3

java - 我可以用数据库中的实际数据替换表中排列的虚拟值吗?

java - LWJGL Native 文件夹没有文件夹