+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 پاسخ 772 بازدید
0 امتیاز
1 پاسخ 531 بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
1 پاسخ 595 بازدید
+2 امتیاز
1 پاسخ 965 بازدید
+1 امتیاز
2 پاسخ 820 بازدید
+2 امتیاز
1 پاسخ 563 بازدید
+1 امتیاز
1 پاسخ 460 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
...