spliterator()
اینجا با «اسپلریتور ArrayList» آشنا می شویم. «اسپلریتور (Spliterator)» نوعی «تکرارگر (Iterator)» مخصوص است. با آن می توان لیست را تکه تکه کرد تا هر تکه جدا پردازش شود؛ مثل تقسیم تکالیف بین هم کلاسی ها.
تعریف و کاربرد spliterator()
متد spliterator() یک شی Spliterator برای لیست برمی گرداند. همچنین trySplit() اسپلریتور را تقریباً نصف می کند. و tryAdvance(Consumer) روی آیتم بعدی عملی انجام می دهد.
سینتکس
public Spliterator spliterator()
مثال: تقسیم و پیمایش با اسپلریتور
در این مثال، لیست نصف می شود و هر نصف جدا پیمایش می شود.
import java.util.ArrayList;
import java.util.Spliterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
Spliterator<String> it1 = cars.spliterator();
Spliterator<String> it2 = it1.trySplit();
System.out.println("First spliterator");
boolean x = it1.tryAdvance((n) -> {
System.out.println(n);
});
while (x) {
x = it1.tryAdvance((n) -> {
System.out.println(n);
});
}
System.out.println("\nSecond spliterator");
boolean y = it2.tryAdvance((n) -> {
System.out.println(n);
});
while (y) {
y = it2.tryAdvance((n) -> {
System.out.println(n);
});
}
}
}
یادداشت: بازنویسی while تک خطی
می توان while تک خطی را به شکل زیر شفاف نوشت:
boolean x = it1.tryAdvance((n) -> {
System.out.println(n);
});
while (x) {
x = it1.tryAdvance((n) -> {
System.out.println(n);
});
}
گام های عملی سریع
- یک
ArrayListبساز و پر کن. Spliteratorبگیر:list.spliterator().- برای تقسیم،
trySplit()را صدا بزن. - با
tryAdvance()هر بخش را پردازش کن.
نکته: تقسیم همیشه نصف دقیق نیست؛ «تقریباً» نصف است.
هشدار: در پردازش موازی، از داده مشترک بدون همگام سازی استفاده نکن.
مطالعه مرتبط
- اسپلریتور ArrayList برای مرور همین مفهوم.
- اندازه لیست با size() برای بررسی تعداد آیتم ها.
- مرتب سازی با sort() قبل از پردازش موازی.
- مرجع رسمی spliterator() برای توضیحات بیشتر.
- آموزش Iterator برای پایه پیمایش.
جمع بندی سریع
spliterator()یک اسپلریتور برمی گرداند.trySplit()لیست را به دو بخش تقسیم می کند.tryAdvance()آیتم بعدی را پردازش می کند.- برای پردازش موازی، تقسیم مفید است.