+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 پاسخ 763 بازدید
0 امتیاز
1 پاسخ 526 بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
1 پاسخ 589 بازدید
+2 امتیاز
1 پاسخ 955 بازدید
+1 امتیاز
2 پاسخ 806 بازدید
+2 امتیاز
1 پاسخ 556 بازدید
+1 امتیاز
1 پاسخ 451 بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
...