5
Używam strumieni java8. Oto struktura danych mam:java8 java.util.ConcurrentModificationException podczas forEach cycle
Map< String, List<String>> mmessage = getSomeMessage();
Potem iteracji poprzez mapy i listy:
mmessage.entrySet().stream().forEach(entry -> {
entry.getValue().stream().forEach(li -> {
if (lis.indexOf(li) == - 1) {
lis.add(lineItem);
}
});
});
Ale dostać współbieżne modyfikacji wyjątek:
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at com.web3.buyer.roomba.RoombaTurn.lambda$received$3(RoombaTurn.java:296)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at com.web3.buyer.roomba.RoombaTurn.received(RoombaTurn.java:295)
at com.web3.buyer.SystemBus.lambda$publishToTheQueue$0(SystemBus.java:51)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Z mojego zrozumienia iteracji za pośrednictwem mapa \ lista nie powinna powodować takiego zachowania.
Co to jest "lis" i jak jest ono powiązane z 'mmessage'' Mapą'? – Eran
Nie możesz dodać wartości do listy, którą przeglądasz ponad – Jens
@ Jens OP nie dodaje wartości do tej samej listy (przynajmniej jeszcze tego nie wiemy, ponieważ nie wiemy, co to jest "lis"). – Eran