如何使用 Arrays.sort() 按长度对字符串数组进行排序

新手上路,请多包涵

我正在尝试使用 Arrays.sort() 根据长度对字符串数组进行排序,但这会按字典顺序而不是按长度对字符串进行排序。这是我的代码:

 S = "No one could disentangle correctly"
String W[] = S.split(" ");
Arrays.sort(W);

排序后:

 correctly
could
disentangle
no
one

但我想要的是

no  //length = 2
one //length = 3
could //length = 4 and likewise
correctly
disentangle

我怎样才能得到上面的输出?请给出 JDK 1.7 和 JDK1.8 的答案。

原文由 Zohra Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 468
2 个回答

如果您使用的是 JDK 1.8 或更高版本,那么您可以使用像 matt answer 这样的 _lambda 表达式_。但是,如果您使用的是 JDK 1.7 或更早版本,请尝试编写一个 自定义比较 器,如下所示:

 String S = "No one could disentangle correctly";
String W[] = S.split(" ");
Arrays.sort(W, new java.util.Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        // TODO: Argument validation (nullity, length)
        return s1.length() - s2.length();// comparision
    }
});

原文由 mmuzahid 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 Java 8 及更高版本

 Arrays.sort(W, (a, b)->Integer.compare(a.length(), b.length()));

一种更简洁的方法是使用 Mano 在此处的回答 中的 Comparator.comparingInt。

原文由 matt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题