Avatar ·

إزالة العناصر من المجموعة في حلقة بدون ConcurrentModificationException

مرحبًا بالجميع! أكتب تطبيقًا صغيرًا بلغة Java لإدارة قائمة المهام. لدي ArrayList، حيث Task هي POJO بسيطة مع حقل boolean isCompleted. أحتاج إلى إزالة جميع المهام المكتملة من القائمة. كتبت الكود التالي: ```java List tasks = new ArrayList<>(); // ... إضافة المهام ... for (Task task : tasks) { if (task.isCompleted()) { tasks.remove(task); } } ``` ولكن عند التشغيل أحصل على `ConcurrentModificationException`. قرأت أن هذا مرتبط بتعديل المجموعة أثناء التكرار، لكنني لا أفهم كيفية القيام بذلك بشكل صحيح. جربت استخدام for عادي مع فهرس — أحيانًا يعمل، وأحيانًا يرمي IndexOutOfBoundsException لأن الفهارس تتغير بعد الإزالة. من فضلك، أخبرني كيف يمكن إزالة العناصر من المجموعة في حلقة بشكل صحيح؟ هل أحتاج إلى استخدام مكرر خاص أم هناك طرق أكثر حداثة في Java 8+؟ شكرًا مقدمًا! <<>>

الطرق الصحيحة لإزالة العناصر