我曾尝试使用 forEach
迭代一个集合,但意识到在该集合上调用 remove(Object o)
是不安全的,可能会导致 ConcurrentModificationException
异常。这是我的尝试:
public void removeMatchup(Set<Player> players) {
predefinedMatchups.stream().filter(m -> m.getPlayers().equals(players)).forEach(m -> predefinedMatchups.remove(m));
}
所以我将它改为了这样:
public void removeMatchup(Set<Player> players) {
Iterator<Matchup> iterator = predefinedMatchups.iterator();
while (iterator.hasNext())
if (iterator.next().getPlayers().equals(players))
iterator.remove();
}
我非常喜欢Streams的简洁性,这就是为什么我正在重新设计我的整个项目以包含Java 8的新功能。
是否有一种解决方法可以在执行安全删除时使用Streams?