我正在寻找一种方法来将此方法从循环访问ArrayList
更改为HashMap
的 for 循环。
public Card findCard(String cardName) {
assert cardName != null;
Card foundCard = null;
if (allKnownCardsMap.containsKey(cardName)) {
foundCard = allKnownCardsMap.get(cardName);
}
// for( Card cd :allKnownCards ) {
// if( cd.cardHasName( cardName ) ) {
// foundCard = cd ;
// }
// }
return foundCard;
}
注释掉的代码是原始代码,顶部 if 语句是我创建的语句,但我无法弄清楚为什么它没有给出相同的结果。
Abit 不确定上下文,因为您似乎已经有了一些描述的地图
所有已知卡地图
.但是要将 Arraylist 转换为 HashMap:
List<String> myList = new ArrayList<String>();
Map<Integer, String> myMap = new HashMap<Integer, String>();
myList.add("A");
myList.add("B");
for (int i = 0; i < aList.size(); i++) {
myMap.put(i + 1, aList.get(i));
}
我假设allKnownCards是一个Card类型的列表,所以首先你需要将该列表更改为map,然后你可以执行任何map操作,以便你可以做这样的事情
这里Map<String, Card> allKnownCardsMap = allKnownCards.stream()
.collect( Collectors.toMap(Card::getName,
Function.identity()) );
现在你可以用你的代码来检查名称
if (allKnownCardsMap.containsKey(cardName)) {
foundCard = allKnownCardsMap.get(cardName);
}