java按数值对ArrayList<String>进行排序
我有一个视频分辨率列表,如下所示:
“1024x768”、“800x600”、“1280x1024”等
我想根据字符串第一部分的数值对其进行排序。 也就是说,上面的内容应该是这样的:
“800x600”、“1024x768”、“1280x1024”
有没有一种快速而肮脏的方法可以做到这一点,我的意思是用不到2-3行代码?如果不是,正确的方法是什么?我得到的值来自一个不是我自己的对象。它确实有一个getWidth()和getHeight()方法返回int
# 1 楼答案
如果数组中的对象是带有
getWidth
方法的Resolution
实例,则可以使用Comparator
对这些对象进行排序:# 2 楼答案
使用比较器是可行的,但是如果你有很多值,它会变得很慢,因为它会多次解析每个字符串
另一种方法是将每个值添加到树形图中,以所需的数字作为键,即
Integer.valueOf(s.substring(0,s.indexOf('x')))
,然后从treeMap.values()
中排序的值创建一个新的ArrayList# 3 楼答案
Shadwell在his answer中提出的解决方案是正确且惯用的
但是,如果您正在寻找更简洁的解决方案,那么我建议您使用lambdaj,这将使您能够编写如下代码:
# 4 楼答案
使用自定义比较器通过Collections api对ArrayList进行排序
# 5 楼答案
正确的方法是编写对字符串进行操作的比较器实现,但它最多解析第一个非数字字符。然后,它从中创建一个int,并比较int
然后可以将该比较器的实例传递到集合中。将()与列表一起排序