有没有办法在 for 循环中从 ArrayList 转换为 HashMap 并获得相同的输出?



我正在寻找一种方法来将此方法从循环访问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);
}

最新更新