【问题标题】:sort string by its length按长度对字符串排序
【发布时间】:2014-04-29 03:41:27
【问题描述】:
 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"]。我只是犯了一个愚蠢的错误。

【问题讨论】:

  • 您想将字符串数组从最短到最大排序(仅检查长度)?你能解释一下你到底想要什么吗?

标签: java sorting


【解决方案1】:
o1 - object1 in your case s1
o2 - object2 in your case s2

compare 方法以这种方式工作并返回

-1 : o1 < o2
0 : o1 == o2
+1 : o1 > o2

在你的情况下s1 &lt; 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]

如有任何问题,请告诉我。

【讨论】:

    【解决方案2】:

    让我们修改它以记录值

    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 方法接受它并将它们翻转到数组中。

    【讨论】:

      【解决方案3】:

      逻辑是倒退的。听起来您想从 s2.length() 中减去 s1.length()。

      【讨论】:

      • 返回负数时,s1在s2前面,s1.length大于s2,所以我认为reuslt应该是["AA", "B"]
      猜你喜欢
      • 2015-06-29
      • 2011-11-26
      • 1970-01-01
      • 2016-04-23
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2017-07-19
      相关资源
      最近更新 更多