我如何 return 给定 HashMap 的有序列表?

How do I return an ordered list given a HashMap?

我有一个名为 Cards 的对象的 HashMap。键是卡片,而值是一个整数,表示 "deck" 中有多少张卡片。每一回合,我都需要 return 一个基于剩余卡片数量的有序列表。我该怎么做呢?到目前为止,这是我的代码:

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;
    }
}

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

Java documentation

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

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

当然,您需要一个比较器来根据值属性对条目进行降序排序。