[英]Sorting a list of Map<String, String> based on a particular numeric value
我有一個List<Map<String, String>>
。 映射的一個特定值是帶有小數的數字輸入。 我希望根據地圖的特定值以降序對列表進行排序。
例如:
List<Map<String, String>> foo= new ArrayList<Map<String, String>>();
Map<String, String> bar1 = new HashMap<>();
Map<String, String> bar2 = new HashMap<>();
Map<String, String> bar3 = new HashMap<>();
bar1.put("name", "abc");
bar1.put("score", "72.5");
bar1.put("sex", "male");
foo.add(bar1);
bar2.put("name", "pqr");
bar2.put("score", "98.7");
bar2.put("sex", "female");
foo.add(bar2);
bar3.put("name", "xyz");
bar3.put("score", "100.0");
bar3.put("sex", "male");
foo.add(bar3);
.
.
.
.
等等
我想按降序對List<Map<String, String>>
進行排序,以使包含100.0分的地圖位於頂部。
我試過了
Collections.sort( list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
但是這里的“ V”是一個字符串,而我需要將其作為浮點數進行排序。 任何幫助,將不勝感激。
如果無法從該地圖創建類,則可以執行以下操作:
Collections.sort(foo, (o1, o2) -> {
return new BigDecimal(o2.get("score")).compareTo(new BigDecimal(o1.get("score")));
});
或者如果您沒有使用Java 8:
Collections.sort(foo, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
return new BigDecimal(o2.get("score")).compareTo(new BigDecimal(o1.get("score")));
}
});
為什么需要List Of map
,您可以使用List<SomeClass>
並根據需要對其進行排序,其中Some類將為您保留name sex score.
價值name sex score.
編輯:您可以使用float轉換String或將float用作Someclass數據類型,這使您的代碼非常容易。
這可能是另一個簡單的解決方案。
使用Float解析字符串,並使用Float的現有比較方法。
Collections.sort(foo, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
return Float.compare(Float.parseFloat(o2.get("score")), Float.parseFloat(o1.get("score")));
}
});
按特定鍵的值對地圖列表進行排序:
public static void sortMapByKey(List<Map<String, Object>> crList, final String sortKey, final boolean ascending) {
Collections.sort(crList, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
Object obj1 = o1.get(sortKey);
Object obj2 = o2.get(sortKey);
if (obj1 != null && obj2 != null) {
if (ascending)
return obj1.toString().compareTo(obj2.toString());
else
return obj2.toString().compareTo(obj1.toString());
} else
return 0;
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.