簡體   English   中英

如何排序“ ArrayList <HashMap<String, String> &gt; arrList”按字母順序排列?

[英]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.

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