+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 پاسخ 729 بازدید
0 امتیاز
1 پاسخ 505 بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
1 پاسخ 561 بازدید
+2 امتیاز
1 پاسخ 833 بازدید
+1 امتیاز
2 پاسخ 741 بازدید
+2 امتیاز
1 پاسخ 526 بازدید
+1 امتیاز
1 پاسخ 417 بازدید
+1 امتیاز
1 پاسخ 1.4هزار بازدید
...