如何在给定HashMap的情况下返回有序列表?

时间:2015-03-26 22:41:26

标签: java list sorting hashmap

我有一个名为Cards的对象的HashMap。关键是卡,而值是一个整数,表示卡在“卡座”中的数量。每回合,我需要根据剩余的卡数返回一个有序列表。我该怎么做呢?到目前为止,这是我的代码:

import java.util.Collections;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Field {
    public Field() {
        Map<Card,Integer> backingMap = new HashMap<Card,Integer>();
    }
    public void buyCardFromField(Card c) {
        if(backingMap.get(c) != 0) {
            backingMap.put(c,backingMag.get(c) - 1);
        }
        else {
            throw new RunTimeException("This card is no longer available!");
        }
    }
    public List getCardsInZone() {
        List<Card> cardList = new ArrayList();
        for(Card element: backingMap.keySet()) {
            cardList.add(element);
        //Some method to sort the arrayList? I'm not sure what to do here?//
        }
        return cardList;
    }
}

2 个答案:

答案 0 :(得分:1)

您可以为Card类创建一个比较器类,然后调用Collections.sort(arraylist).

Java documentation

答案 1 :(得分:1)

最简单的方法可能是从hashmap中获取条目并对其进行排序。使用条目集的好处是您的卡片对象不需要具有计数属性。

Set<Entry<Card, Integer>> entries = backingMap.entrySet(); 
ArrayList<Entry<Card, Integer> entryList = new ArrayList();
entryList.addAll(entries);
Lists.sort(entryList, myNewComparator);
return entryList;

当然,您需要一个比较器,它根据value属性按降序对Entries进行排序。