![](/img/trans.png)
[英]Unable to sort List Collection by ascending or desending order in OpenCms
[英]Unable to sort the list by ascending order
Map<String, String> map ;
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
/////OnCreate.............
function1(){
map = new TreeMap<String, String>();
map.put("id", "id");
map.put("amont", "amount");
list.add(map);
System.out.println(list);
}
id = 1,3,5,57,80的輸入值
金額的輸入值= 100,500,200,10,10000
無法按金額的升序對列表進行排序。 它仍按插入順序顯示。
我該如何解決? 我感謝任何幫助。 提前致謝。
預期產出:金額升序:
amt=10 id=4
amt=100 id=1
amt=200 id=3
amt=500 id=2
amt=10000 id=5
假設這是你的輸入
Map<String, String> map ;
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
map = new TreeMap<String, String>();
map.put("id","1");
map.put("amount","100");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","2");
map.put("amount","500");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","3");
map.put("amount","200");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","4");
map.put("amount","10");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","5");
map.put("amount","10000");
list.add(map);
這是您的排序代碼
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String value1 = o1.get("amount");
String value2 = o2.get("amount");
return Integer.parseInt(value1)-Integer.parseInt(value2);
}
});
for (Map<String, String> map1 : list) {
String id = map1.get("id");
String amount = map1.get("amount");
System.out.println("amount= "+amount + " , " +"id = "+id);
}
產量
amount= 10 , id = 4
amount= 100 , id = 1
amount= 200 , id = 3
amount= 500 , id = 2
amount= 10000 , id = 5
更新
替換return Integer.parseInt(value1)-Integer.parseInt(value2);
如果值為十進制,則使用以下代碼。
return Double.valueOf(value1).compareTo(Double.valueOf(value2));
使用sort()
例如:
list.add(map);
Collections.sort(list)
System.out.println(list)
它現在將按照其包含的內容類型的升序打印列表。
您必須使用自定義Comparator並在Treemap的構造函數中傳遞它。 例如,按照比較器使用金額進行排序:
請參閱以下鏈接。 它肯定會解決你的問題
http://java2novice.com/java-collections-and-util/treemap/comparator-user-object/
默認情況下,列表未排序。 你需要帶有Comparator的 Collections.sort()方法。 所以看起來你想按amount
排序,你應該像下面這樣實現比較器。
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String amount1 = o1.get("amount");
String amount2 = o2.get("amount");
return new Integer(amount1).compareTo(new Integer(amount2));
}
});
這是完整的工作副本,
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map1 = new TreeMap<String, String>();
map1.put("id", "2");
map1.put("amount", "200");
Map<String, String> map2 = new TreeMap<String, String>();
map2.put("id", "1");
map2.put("amount", "100");
Map<String, String> map3 = new TreeMap<String, String>();
map3.put("id", "3");
map3.put("amount", "300");
list.add(map1);
list.add(map2);
list.add(map3);
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String amount1 = o1.get("amount");
String amount2 = o2.get("amount");
return amount1.compareTo(amount2);
}
});
System.out.println(list);
它應該打印,
[{amount=100, id=1}, {amount=200, id=2}, {amount=300, id=3}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.