String 为什么Guavas订购没有';是否正确排序整数的字符串值?

String 为什么Guavas订购没有';是否正确排序整数的字符串值?,string,sorting,guava,String,Sorting,Guava,我想知道为什么Guavas订购在以下代码下不能正常工作: public static void main(String[] args) { List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); System.out.println(Ordering.natural().isOrdered(integers)); List<String> strings = A

我想知道为什么Guavas
订购
在以下代码下不能正常工作:

public static void main(String[] args) {
    List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    System.out.println(Ordering.natural().isOrdered(integers));

    List<String> strings = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
    System.out.println(Ordering.natural().isOrdered(strings));

    List<String> strings2 = Arrays.asList("6417", "6418", "6419", "6420");
    System.out.println(Ordering.natural().isOrdered(strings2));
}
我希望看到
true
3次


有人能解释为什么它没有按预期排序吗?

字符串的排序基于中定义的词典排序,而不是数字排序。对于一对字符串,将获取并比较每个字符串的第一个字符。只有当它们相等时,才会查看第二个字符,依此类推。因此,字符串
“10”
比字符串
“9”
小,因为字符
'1'
'9'

请注意,这是JavaAPI的一部分,不是特定于Guava的。您还可以查看
“10”的输出。将其与(“9”)
进行比较以查看这一点<番石榴的code>Ordering.natural()
基本上只是调用比较对象的
compareTo
方法


原因是字符串是任意字符序列,不可能将所有字符串都解释为数字,因此数字比较通常会失败。其他编程语言也以同样的方式处理这个问题。

字符串是根据它们的字典顺序排序的,而不是根据它们的“整型”值排序的。。!他们的观点没有必要三次“真实”。字符串“1001”比“302”小,因为字典中“1001”比“302”在前面。知道了?
true
false
true