按键排序我的HashMap

时间:2014-08-29 08:35:55

标签: java sorting 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对此hashmap进行排序,以便顶部的artcicles是最新的,而底部的artcicles将是最旧的。

我之前已经问过这个问题,但我找不到在ArrayList之前考虑我的Hashmap的解决方案。

1 个答案:

答案 0 :(得分:1)

如果我的问题是正确的,因为您希望根据项目添加时间对单个哈希映射中添加的项目详细信息进行排序,那么您实际上必须对包含项目集合而不是单个哈希映射的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());