2014-08-29 61 views
-4

排序我的HashMap我有以下HashMap通過重點

ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

它使用下面的鍵:

static final String KEY_ITEM = "item"; // parent node 
static final String KEY_ID = "id"; 
static final String KEY_NAME = "name"; 
static final String KEY_TITLE = "title"; 
static final String KEY_COST = "cost"; 
static final String KEY_DESC = "description"; 
static final String KEY_LINK = "link"; 
static final String KEY_PUBDATE = "pubDate"; 
static final String KEY_TIME = "pubDate"; 

然後我用這一段代碼,以填充HashMap中。

HashMap<String, String> map = new HashMap<String, String>(); 

map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
//Get the title of the article. 
map.put(KEY_NAME, parser.getValue(e, KEY_TITLE)); 
//Get the description of the article. 
map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 
//Add the keys to the hashmap. 
menuItems.add(map); 

等.....

我有一個名爲KEY_TIME鍵,其容納每篇文章在例如格式16:30發佈時間。

我想知道如何通過關鍵KEY_TIME對此散列圖進行排序,以便頂部的artcicles將是最近的,最下面的artcicles將是最早的。

我知道這已被問過,但我找不到解決方案,它在Hashmap之前佔我的ArrayList

+1

請做一些研究befor要求。 ..它在這裏被問了很多次,我很確定谷歌會給你一些答案 – Selvin 2014-08-29 08:37:56

+3

任何你沒有使用TreeMap的理由?它已經排序。 – 2014-08-29 08:38:09

+0

我很確定他想要得到這個'ArrayList > menuItems'(通過它的一個值 - 像hashmapItem [「Column」])不是HashMaps本身...我很漂亮確定TreeMap按照TreeMap的同一個實例中的鍵排序,而不是ArrayList中的多個TreeMaps – Selvin 2014-08-29 08:39:35

回答

1

如果我的問題是正確的,因爲您想要根據項目添加時間對單個hashmaps中添加的項目詳細信息進行排序,那麼您實際上必須對包含項目集合而不是單個hashmaps的arraylist進行排序。您可以通過創建一個自定義的比較類如下做到這一點: -

class ItemEntryComparator implements Comparator<Map<String,String>> { 

    static final String KEY_TIME = "pubDate"; 
    @Override 
    public int compare(Map<String, String> o1, Map<String, String> o2) {   
     return o2.get(KEY_TIME).compareTo(o1.get(KEY_TIME)); 
    } 

} 

這種比較可以傳遞給收藏排序排序您的項目的ArrayList: -

Collections.sort(menuItems, new ItemEntryComparator());