gpt4 book ai didi

java - arraylist.forEach 中的引用成员被修改?

转载 作者:行者123 更新时间:2023-11-30 03:35:31 25 4
gpt4 key购买 nike

我正在创建一个生存模拟器,并且我有一个 EntityarrayList。我正在编写一个 checkForDead() 方法,如果成员死亡,它将删除该成员。现在,我有一个很长的 for 语句来执行此操作。但是,我想使用 arrayList.forEach() 以便使其更具可读性。如前所述,部分操作必须将其删除。如何引用 forEach() 方法中正在修改的成员?例如

a.forEach(a.remove(x));

其中 a 是列表,x 是正在修改的成员。我怎样才能得到x是什么?

checkForDead方法中的原始代码:

for (int x = 0; x < a.size(); x++) {

if (a.get(x).calories <= 0) {
Fates.addDeathRecord(a.get(x).name, x, "starved to death");
a.remove(x);
}

else if (a.get(x).hydration <= 0) {
Fates.addDeathRecord(a.get(x).name, x, "died of thirst");
a.remove(x);
}

else if (a.get(x).heat <= 0) {
Fates.addDeathRecord(a.get(x).name, x, "froze to death");
a.remove(x);
}

else if (a.get(x).heat >= 14) {
Fates.addDeathRecord(a.get(x).name, x, "overheated");
a.remove(x);
}

else if (a.get(x).moral <= Chance.randomNumber(0, 2)) {
Fates.addDeathRecord(a.get(x).name, x, "commited suicide");
a.remove(x);
}

}

}

最佳答案

forEach方法可能不适合在结构上修改正在迭代的集合。正如 javadoc 中所述:

The default implementation behaves as if:

 for (T t : this)
action.accept(t);

根据您使用的 List 实现,通过添加或删除操作集合可能会导致 ConcurrentModificationException。这是使用传统Iteratorremove 的情况。可能仍然是最好的解决方案。

//keep track of index for death record
int x = 0;
for (Iterator<Entry> iter = a.iterator(); iter.hasNext(); ++x) {

final Entry next = iter.next();
if (next.calories <= 0) {
Fates.addDeathRecord(next.name, x, "starved to death");
iter.remove();
}

else if (next.hydration <= 0) {
Fates.addDeathRecord(next.name, x, "died of thirst");
iter.remove();
}

else if (next.heat <= 0) {
Fates.addDeathRecord(next.name, x, "froze to death");
iter.remove();
}

else if (next.heat >= 14) {
Fates.addDeathRecord(next.name, x, "overheated");
iter.remove();
}

else if (next.moral <= Chance.randomNumber(0, 2)) {
Fates.addDeathRecord(next.name, x, "commited suicide");
iter.remove();
}

}

关于java - arraylist.forEach 中的引用成员被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com