您必须将其分为两个步骤:
- 创建要插入的地图。
- 将其插入
mapSnakes
。
像这样:
if(mGameAssets[i].getAssetType().isSnake()){ //check if the asset is snake
// Step 1
Map<Integer,Integer> assetMap = new HashMap<Integer,Integer>();
assetMap.put(i, mGameAssets[i].getDamage());
// Step 2
mapSnakes.put(++coutner, assetMap);
}
尽管您的设计看起来有些奇怪,但是您确定这是您想要做的吗?
在回应您的评论时,您说您想知道两件事:
-
mGameAsset
有多少条蛇。
- 它们是什么指数,它们的损害是什么。
您可以为此使用一个映射,该映射将索引映射到蛇本身,例如,假设您的资产属于Asset
类:
private void filterSnakes () {
// maps asset index => snake
Map<Integer,Asset> snakes = new HashMap<Integer,Asset>();
// find all the snakes:
for (int i = 0; i < mGameAssets.length; ++ i) {
if (mGameAssets[i].getAssetType().isSnake())
snakes.put(i, mGameAssets[i]);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// now we can process their indices and damage, for example:
for (Map.Entry<Integer,Asset> snakeEntry : snakes.entrySet()) {
int index = snakeEntry.getKey();
int damage = snakeEntry.getValue().getDamage();
System.out.println("Snake at " + index + " damage is " + damage);
}
// and we can find the number of snakes too:
int snakeCount = snakes.size();
System.out.println("There are " + snakeCount + " snakes.");
// bonus: we can even just get a generic collection of the snakes:
Collection<Asset> snakesOnly = snakes.values();
}
如果要保留插入顺序,请使用LinkedHashMap
。
另一种选择是使用ArrayList
或其他一些List
代替Map
; 如果这样做,则必须制作一些可以容纳索引和蛇的小类(类似于Map.Entry<Integer,Asset>
,则可以为每个蛇条目创建一个小类并维护一个这些List
,还有更多工作要做,但是它的优点是没有地图的开销(这对您可能或不重要)。