簡體   English   中英

基於字符串Java排序

[英]Sorting based on string java

我有一個需要基於string排序的對象list

列表中的每個對象將包含以下內容

e.g.
fruitType = Pear
fruitType = Mango
fruitType = Apple
fruitType = Apple
fruitType = Mango

現在,說我想先按“ Apple ”訂購,然后按“ Mango ”訂購。 因此,蘋果排在第一位,其次是芒果。

我可以做一個普通的asc / desc排序,但這還不夠。 也可以使用apache commons進行上述排序嗎?

如果要按預定義的順序排序(即,您已經牢記了一些固定的字符串順序),則可以這樣進行:

  1. 設置HashMap<String,Integer> sortTable 將所有字符串放入其中,並按排序順序將每個字符串映射到其索引。 如果您首先要使用Apple ,然后是Mango ,然后是Plum等,則添加以下內容: sortTable.put("Apple",0); sortTable.put("Mango",1); sortTable.put("Plum",2); sortTable.put("Apple",0); sortTable.put("Mango",1); sortTable.put("Plum",2); 等等。
  2. 現在,按如下所示編寫Comparator 比較兩個String實例st ,您都在HashMap進行查找,並通過它們映射到的值進行比較。 因此,如果您要比較ApplePlum ,則需要查找Apple並發現它映射為0 您查找Plum ,發現它映射到2 然后return Integer.compare(0,2)

換句話說,您的Comparator使用:

public int compare(String x, String y) {
    return Integer.compare(sortTable.get(x), sortTable.get(y));
}

這樣,您就可以在列表中使用Collections.sort ,並將您創建的Comparator傳遞給它。

注意,您需要某種策略來處理未在預定義列表中的String ,或者需要某種保證永遠不會發生的策略。

public class Fruit implements Comparable<Fruit> {
    private String whatYouWantToSortBy;
    ...
    public int compareTo(Fruit other) {
        return whatYouWantToSortBy.compareTo(other.whatYouWantToSortBy);
    }
}

要排序,請使用Collections.sort 或者,您可以只使用一種自動對自身進行排序的List類型,例如TreeSet。

暫無
暫無

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

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