我目前正在尝试根据单词“ Item”后找到的数字来订购ArrayList
个String
个元素(称为myarraylist
)。以下是myarraylist
中的代码片段:
Item 1
Item 2
Item 3
...
Item 9
Item 10
我想按以下顺序订购
myarraylist
:Item 10
Item 9
Item 8
...
Item 3
Item 2
Item 1
到目前为止,这是我尝试过的:
Collections.sort(myarraylist, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(myarraylist);
但是,这按以下顺序对
myarraylist
进行排序Item 9
Item 8
...
Item 3
Item 2
Item 10
Item 1
如您所见,
Item 10
不合适,因为它的第一个数字“ 1”读为“ 10”。有谁知道如何正确地按反数字顺序排列myarraylist
? 最佳答案
这是因为默认的字符串Comparator
使用lexicographical order-即像字典一样逐个字符。由于“ 1”在“ 2”之前,因此任何以“ 1”开头的字符串都将在其他以“ 2”开头的字符串之前。
您应该使用自定义比较器来实现Natural Sorting。一个很好的例子是Dave Koelle的Alphanum,您可以这样使用:
Collections.sort(myarraylist, new AlphanumComparator());