[英]How to sort “ ArrayList<HashMap<String, String>> arrList ” alphabatically?
您能指導我如何按字母順序對具有哈希映射的數組列表進行排序嗎?
JSONArray jArr2 = new JSONArray(jsonString2);
for(int i=0;i<jArr2.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
map.put("titleName",jArr2.getJSONObject(i).getString("titleName"))
programList.add(map);
}
實現一個Comparator<HashMap<String, String>>
,它僅提取與值鍵關聯的值,然后使用Collections.sort方法對您的數組列表進行排序。
例如:
class MyComparator implements Comparator<Map<String, String>>{
private final String key;
public MyComparator(String key)
{
this.key = key;
}
public int compare(Map<String, String> first,
Map<String, String> second)
{
// TODO: Null checking, both for maps and values
String firstValue = first.get(key);
String secondValue = second.get(key);
return firstValue.compareTo(secondValue);
}
}
查看您的示例,我認為您根本不需要地圖。 您所擁有的是一張地圖列表,其中每個地圖只有一個鍵,即“ titleName”。 為什么不只列出標題名稱? 然后您的代碼將如下所示:
JSONArray jArr2 = new JSONArray(jsonString2);
List<String> titleNames = new ArrayList<>();
for (int i = 0; i < jArr2.length(); i++) {
titleNames.add(jArr2.getJSONObject(i).getString("titleName"))
}
您知道列表僅包含titleName,而無需使Maps的數據結構復雜化!
然后,您可以簡單地通過使用
Collections.sort(titleNames);
請注意,這將起作用,而其他建議在地圖列表上的Collections.sort()的答案將不起作用。 這是因為titleNamees是一個字符串列表,實現了Comparable(即sort()方法知道如何相對於彼此排序),而Map沒有實現可比性(因為有多種方式訂購Maps-條目,字節總數等)。
是的,您可以使用Collections.sort(); 使用自定義比較器 這是文檔 。
Collections.sort(YOUR_ARRAY_LIST, new YourCustomComparator());
這應該是您必須擁有的課程
class YourCustomComparator implements Comparator<HashMap<String, String>> {
@Override
public int compare(HashMap<String, String> lhs, HashMap<String, String> rhs) {
// check here your objects. lhs and rhs. compare them as you want
// return 1 if lhs is greater than rhs
// return 0 if ther are same
// return -1 otherwise
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.