[英]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進行上述排序嗎?
如果要按預定義的順序排序(即,您已經牢記了一些固定的字符串順序),則可以這樣進行:
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);
等等。 Comparator
。 比較兩個String
實例s
和t
,您都在HashMap
進行查找,並通過它們映射到的值進行比較。 因此,如果您要比較Apple
和Plum
,則需要查找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.