我有一个由字符串组成的ArrayList。这个ArrayList包含......
" 60分钟" " 120分钟" " 30分钟"
如果我使用Collections.sort(ArrayList);
,则会导致" 120分钟"第一。这是因为" 1" in" 120明显小于" 3"在" 30"
是否有一种简单的方法可以对此ArrayList进行排序,使其显示为...
" 30分钟" " 60分钟" " 120分钟"
答案 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));