按数字值</string>对ArrayList <string>进行排序

时间:2010-09-15 23:01:44

标签: java sorting

我有一个视频分辨率的ArrayList,如下所示:

“1024x768”,“800x600”,“1280x1024”等

我想根据字符串第一部分的数值对其进行排序。 即,上述内容将如下所示:

“800×600”, “1024×768”, “1280×1024”

有没有快速而肮脏的方法来做到这一点,我的意思是不到2-3行代码?如果没有,那么正确的方法是什么?我得到的值来自一个不属于我自己的对象。它有一个返回整数的getWidth()和getHeight()方法。

5 个答案:

答案 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());