对包含带数字的字符串的Arraylist进行排序

时间:2014-03-26 17:56:21

标签: java sorting arraylist

我有一个由字符串组成的ArrayList。这个ArrayList包含......

" 60分钟" " 120分钟" " 30分钟"

如果我使用Collections.sort(ArrayList);,则会导致" 120分钟"第一。这是因为" 1" in" 120明显小于" 3"在" 30"

是否有一种简单的方法可以对此ArrayList进行排序,使其显示为...

" 30分钟" " 60分钟" " 120分钟"

3 个答案:

答案 0 :(得分:7)

定义自己的实现Comparator<String>的类。在compare方法中,从字符串参数的第一部分中提取数字并比较它们,如果第一个数字小于,等于或大于,则返回-1,0或1。第二个数字。

然后,您可以将比较器的实例(以及ArrayList)传递给Collections.sort

答案 1 :(得分:1)

使用Java 8,您可以使用以下内容进行单行操作:

Collections.sort(list, comparing(s -> Integer.valueOf(s.split("\\s+")[0])));

然而,仍然需要一些凌乱的逻辑才能进行比较。

创建一个以int形式保存信息的ad-hoc类并实现Comparable接口可能更简洁,更容易维护。

答案 2 :(得分:0)

使用@ rgettman的想法,并假设所有字符串都在您的示例输入中正确格式化,比较本身可能是这样的:

int spcIdx = s1.indexOf(" ");
int i1 = s1.substring(0, spcIdx);
String s1 = s1.substring(spcIdx + 1);

//Repeat for i1 and s2...

return  (((new Integer(i1)).compareTo(i2) * 10) + s1.compareTo(s2));