Java - 检查String的ArrayList是否按字母顺序排列

min*_*ino 5 java sorting arraylist

我有一个名为account的ArrayList,其中包含字符串.我正在尝试编写一种方法来检查它们是否有序并根据它们是否有序而返回true或false.

你会怎么做?我已经尝试用for-loop检查初始字符但是它非常错误.我创建了一个新的ArrayList并将其设置为等于原始的,然后对它进行排序并进行比较,但由于它们包含相同的数据,因此它总是回归真实.

只是一个额外的快速问题,因为我正在为字符串执行此操作,您如何检查某些数字是否按升序/降序排列?是同一个校长吗?

谢谢!

fge*_*fge 12

试试这个(假设您想要使用它们的自然顺序来比较字符串):

String previous = ""; // empty string: guaranteed to be less than or equal to any other

for (final String current: thelist) {
    if (current.compareTo(previous) < 0)
        return false;
    previous = current;
}

return true;
Run Code Online (Sandbox Code Playgroud)

这是因为String实现Comparable<String>,并且将使用字符串的自然顺序进行比较.

  • 我喜欢你的只读foreach循环中的`final` (3认同)
  • @dantuch,final并不意味着*不改变该列表的任何元素*.这意味着局部变量引用不会改变.更改列表中的元素内容将需要不可变的类(String确实是一个),并且它与此处的"final"无关.`for in`确保没有修改,它有点奇怪它适用于`iterator`,因为它可能不使用`remove()`,但那是另一个奇怪的点(xforming迭代器到'Enumeration`基本上已弃用) (2认同)

Pio*_*sen 6

如果你不介意使用外部库(Guava)Ordering会这样做:

boolean isSorted = Ordering.natural().isOrdered(list);
Run Code Online (Sandbox Code Playgroud)

这将做String和其他Comparables.如果要检查某些自定义类型的顺序,请使用类中的任何静态工厂方法Ordering或将其子类化.

编辑不区分大小写的订购用法:

boolean isSorted = Ordering.from(String.CASE_INSENSITIVE_ORDER).isOrdered(list);
Run Code Online (Sandbox Code Playgroud)