我如何 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).
最简单的方法可能是从哈希图中获取条目并对其进行排序。使用条目集的好处是您的卡片对象不需要具有计数属性。
Set<Entry<Card, Integer>> entries = backingMap.entrySet();
ArrayList<Entry<Card, Integer> entryList = new ArrayList();
entryList.addAll(entries);
Lists.sort(entryList, myNewComparator);
return entryList;
当然,您需要一个比较器来根据值属性对条目进行降序排序。
我有一个名为 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).
最简单的方法可能是从哈希图中获取条目并对其进行排序。使用条目集的好处是您的卡片对象不需要具有计数属性。
Set<Entry<Card, Integer>> entries = backingMap.entrySet();
ArrayList<Entry<Card, Integer> entryList = new ArrayList();
entryList.addAll(entries);
Lists.sort(entryList, myNewComparator);
return entryList;
当然,您需要一个比较器来根据值属性对条目进行降序排序。