我有一个视频分辨率的ArrayList,如下所示:
“1024x768”,“800x600”,“1280x1024”等
我想根据字符串第一部分的数值对其进行排序。 即,上述内容将如下所示:
“800×600”, “1024×768”, “1280×1024”
有没有快速而肮脏的方法来做到这一点,我的意思是不到2-3行代码?如果没有,那么正确的方法是什么?我得到的值来自一个不属于我自己的对象。它有一个返回整数的getWidth()和getHeight()方法。
答案 0 :(得分:5)
如果数组中的对象是使用Resolution
方法的getWidth
个实例,那么您可以使用Comparator
对这些对象进行排序:
Collections.sort(resolutions, new Comparator {
public int compare(Resolution r1, Resolution r2) {
return Integer.valueOf(r1.getWidth()).compareTo(Integer.valueOf(r2.getWidth()));
}
});
答案 1 :(得分:0)
正确的方法是编写一个对字符串进行操作的Comparator实现,除了它解析为第一个非数字字符。然后它创建一个int并比较整数。
然后,您可以将该Comparator的实例与List一起传递到Collections.sort()。
答案 2 :(得分:0)
使用自定义Comparator通过Collections api对ArrayList进行排序。
Collections.sort(resolutionArrayList, new ResolutionComparator())
答案 3 :(得分:0)
使用Comparator会起作用,但如果你有很多值会慢,因为它会多次解析每个String。
另一种方法是将每个值添加到TreeMap中,并将您想要的数字作为键,即Integer.valueOf(s.substring(0,s.indexOf('x')))
,然后从treeMap.values()
中的已排序值创建一个新的ArrayList。
答案 4 :(得分:0)
Shadwell在his answer中提出的解决方案是正确和惯用的。
但如果您正在寻找更简洁的解决方案,那么我建议您使用lambdaj,这样您就可以编写如下代码:
List<Resolution> sortedResolutions = sort(resolutions, on(Resolution.class).getWidth());