+1 امتیاز
قبل در برنامه نویسی توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط

وقتی مجموعه (Set) جاوا رو برای حذف برخی از اعضا به صورت تک تک می خوام بررسی کنم و از foreach استفاده می کنم با خطای دسترسی همزمان مواجه می شم که به دلیل  همروند بودن عملیات foreach هست.

آیا راه دیگه ای به غیر از پیمایش iterator مجموعه برای این کار وجود داره؟

اگه چنین راهی هست کدوم روش بهینه تره؟

1 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

برای حذف عناصر یک لیست بصورت درجا (in place) تنها راه، استفاده از Iterator است ولی اگه نخواهید بصورت درجا انجام شود و پس از حذف یک لیست جدید برای شما ساخته شود می توانید از stream ها در جاوا 8 استفاده کنید.

برای مثال در کد زیر تمام غذاهایی برای گیاه خوارها مناسب نیستند حذف کرده و یک لیست جدید که فقط برای Vegetarian ها مناسب است را بر میگرداند.

        List<Dish> vegetarianMenu = menu.stream().filter(
                d -> d.isVegetarian()).collect(toList());

سوالات مشابه

+1 امتیاز
2 پاسخ 746 بازدید
0 امتیاز
1 پاسخ 517 بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
1 پاسخ 574 بازدید
+2 امتیاز
1 پاسخ 917 بازدید
+1 امتیاز
2 پاسخ 762 بازدید
+2 امتیاز
1 پاسخ 545 بازدید
+1 امتیاز
1 پاسخ 434 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
...