簡體   English   中英

按數字值對ArrayList <String>進行排序

[英]Sort a ArrayList<String> by number value

我有一個視頻分辨率的ArrayList,如下所示:

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

我想根據字符串的第一部分中的數值對其進行排序。 即,上面的內容將如下所示:

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

有沒有一種快速而骯臟的方法來做到這一點,我的意思是不到2-3行代碼? 如果沒有,那么正確的方法是什么? 我得到的值來自一個不屬於我自己的對象。 它有一個返回int的getWidth()和getHeight()方法。

如果數組中的對象是具有getWidth方法的Resolution實例,那么您可以使用Comparator對這些對象進行排序:

Collections.sort(resolutions, new Comparator {
    public int compare(Resolution r1, Resolution r2) {
        return Integer.valueOf(r1.getWidth()).compareTo(Integer.valueOf(r2.getWidth()));
    }
});

正確的方法是編寫一個對字符串進行操作的Comparator實現,除了它解析為第一個非數字字符。 然后它創建一個int並比較int。

然后,您可以將該Comparator的實例與List一起傳遞到Collections.sort()。

使用自定義Comparator通過Collections api對ArrayList進行排序。

Collections.sort(resolutionArrayList, new ResolutionComparator())

使用Comparator會起作用,但如果你有很多值,它會變慢,因為它會多次解析每個String。

另一種方法是將每個值添加到TreeMap中,使用您想要的數字作為鍵,即Integer.valueOf(s.substring(0,s.indexOf('x'))) ,然后從中創建一個新的ArrayList。在treeMap.values()排序的值。

Shadwell在他的回答中提出的解決方案是正確和慣用的。

但是,如果你正在尋找一個更簡潔的解決方案,那么我建議你使用lambdaj ,這將使你能夠編寫如下代碼:

List<Resolution> sortedResolutions = sort(resolutions, on(Resolution.class).getWidth());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM