Я пытался перебирать коллекцию с помощью forEach
, но реализованный вызов remove(Object o)
на этой самой коллекции был небезопасным и мог вызвать ConcurrentModificationException
. Это то, что я пытаюсь сделать:Сняв элемент из коллекции с помощью Java 8
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();
}
Мне очень нравится, как лаконичный потоки, поэтому я переработав весь мой проект, чтобы включить Java 8 новых функций.
Есть ли обходной путь для этой проблемы, где я мог бы использовать потоки при выполнении безопасных удалений?
Что вы имеете в виду под «безопасным Вы не хотите получить? исключение ConcurrentModificationException, в то время как вы фактически используете только один поток для удаления, или вы имели в виду потокобезопасность? – Les