使用Collections.sort对字符串进行排序?

时间:2015-04-12 20:42:49

标签: java string sorting

我尝试使用collection.sort()方法对两个字符串进行排序,但我在理解实现逻辑时遇到了问题。这是我到目前为止所拥有的。我的实施有问题吗? 注意:我想按字母顺序对它们进行排序: "苹果" > "橙色"

Collections.sort(mailbox.getMessages() , (String a, String b) -> {
    if (String.valueOf(a.charAt(0)) > String.valueOf(b.charAt(0))) {
        return -1;
    }
    else if (String.valueOf(a.charAt(0)) <
        String.valueOf(b.charAt(0))) {
        return 1;
    }
    else {
        return 0;
    }
});

2 个答案:

答案 0 :(得分:5)

String实现了一个Comparable<String>,它实现为词典比较,换句话说,默认为"Apple".compareTo("Orange") < 0。所以默认就足够了。

现在Collections.sort有一个将此比较器考虑在内的变体,因此您只需使用:

Collections.sort(mailbox.getMessages());

关于您自己的实施:

您不应该使用String.valueof转换回字符串:您可以将char<进行比较,但不能在String上使用此运算符}秒。此外,您的实现不是递归:如果两个第一个字符相等,那并不意味着String相等本身< / em>,例如"Apple""Ambiguous"。所以你必须实现一个更复杂的比较器。

答案 1 :(得分:3)

您无法将String与符号>进行比较。你可以这样做:

Collections.sort(mailbox.getMessages(), (String a, String b) -> {
     return Character.compare(a.charAt(0), b.charAt(0));
});

请注意,这将仅根据第一个字符排序。如果您想以词法方式对整个字符串值进行排序,那么您只需使用Collections.sort(mailbox.getMessages()),因为String已经实现了Comparable