Spliterator في Java هو واحد من أربعة متكررات – Enumeration ،Iterator ،ListIterator و Spliterator.
Spliterator في Java
مثل Iterator و ListIterator ، Spliterator هو متكرر في Java يُستخدم لتكرار العناصر واحداً تلو الآخر من كائن يتم تنفيذه بواسطة List. بعض النقاط المهمة حول Spliterator في Java هي:
- Spliterator في Java هو واجهة في Java Collection API.
- تم تقديم Spliterator في إصدار Java 8 في حزمة
java.util
. - يدعم وظيفة البرمجة المتوازية.
- يمكننا استخدامه لكل من Collection API وStream API classes.
- يوفر خصائص حول كائنات Collection أو API.
- لا يمكننا استخدام هذا المتكرر للفئات التي تم تنفيذها بواسطة Map.
- يستخدم الطريقة
tryAdvance()
لتكرار العناصر بشكل فردي في عدة Threads لدعم المعالجة المتوازية. - يستخدم الطريقة
forEachRemaining()
لتكرار العناصر بتسلسل في Thread واحد. - يستخدم الطريقة
trySplit()
لتقسيم نفسه إلى معالجات فرعية لدعم المعالجة المتوازية. - يدعم Spliterator كل من معالجة البيانات التسلسلية والمتوازية.
لكن Spliterator نفسه لا يوفر سلوك البرمجة المتوازية. ومع ذلك، يقدم بعض الأساليب لدعم ذلك. يجب على المطورين الاستفادة من أساليب واجهة Spliterator وتنفيذ البرمجة المتوازية باستخدام إطار Fork/Join (طريقة جيدة).
الوظائف الرئيسية لـ Spliterator
- تقسيم بيانات المصدر.
- معالجة بيانات المصدر.
مخطط فئة Java Spliterator
تظهر الرسم التوضيحي التالي مخطط الفئة لواجهة Java Spliterator. يحتوي على العديد من الحقول والأساليب.
أساليب واجهة Java Spliterator
في هذا القسم، سنقوم بسرد جميع أساليب Java Spliterator واحدة تلو الأخرى مع وصف مفيد.
- int characteristics(): تعيد مجموعة من الخصائص لهذا الـ Spliterator وعناصره.
- long estimateSize(): تقوم بإرجاع تقدير لعدد العناصر التي ستواجهها عملية استعراض forEachRemaining()، أو تعيد Long.MAX_VALUE إذا كانت لانهائية أو مجهولة أو مكلفة للغاية للحساب.
- default void forEachRemaining(Consumer action): تقوم بتنفيذ الإجراء المعطى لكل عنصر متبقي، تتسلسليا في الخيط الحالي، حتى يتم معالجة جميع العناصر أو حتى يقوم الإجراء بإلقاء استثناء.
- default Comparator getComparator(): إذا كان مصدر هذا الـ Spliterator قد تم فرزه بواسطة مقارن، تقوم بإرجاع تلك المقارنة.
- default long getExactSizeIfKnown(): طريقة ملائمة تعيد estimateSize() إذا كان هذا الـ Spliterator محدد الحجم، وإلا -1.
- default boolean hasCharacteristics(int characteristics): تعيد قيمة صحيحة إذا كانت خصائص() لهذا الـ Spliterator تحتوي على جميع الخصائص المعطاة.
- boolean tryAdvance(Consumer action): إذا كان هناك عنصر متبق، تقوم بتنفيذ الإجراء المعطى عليه، وتعيد true؛ وإلا تعيد false.
- Spliterator trySplit(): إذا كان بإمكان هذا الـ spliterator أن يتم تقسيمه، تعيد Spliterator يغطي العناصر التي لن تغطى بواسطة هذا الـ Spliterator بعد استرداد من هذه الطريقة.
Java Spliterator Example
في هذا القسم، سنناقش كيفية إنشاء كائن Java Spliterator باستخدام spliterator() وسنقوم بتطوير مثال بسيط.
import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;
public class SpliteratorSequentialIteration
{
public static void main(String[] args)
{
List names = new ArrayList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// الحصول على Spliterator
Spliterator namesSpliterator = names.spliterator();
// عبور العناصر
namesSpliterator.forEachRemaining(System.out::println);
}
}
الناتج:-
Rams
Posa
Chinni
إذا لاحظنا البرنامج والناتج أعلاه، يمكننا أن نفهم بسهولة أن هذا الطريقة Spliterator.forEachRemaining() تعمل بنفس الطريقة التي يعمل بها ArrayList.foreach(). نعم، كلاهما يعمل بنفس الطريقة.
مزايا Spliterator
- على عكس Iterator و ListIterator، يدعم وظيفة البرمجة المتوازية.
- على عكس Iterator و ListIterator، يدعم كل من المعالجة التسلسلية والتوازية للبيانات.
- بالمقارنة مع محددات الإرجاع الأخرى، يوفر أداءً أفضل.
Iterator vs Spliterator
Iterator | Spliterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.8. |
It is an Iterator for whole Collection API. | It is an Iterator for both Collection and Stream API, except Map implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It does NOT support Parallel Programming. | It supports Parallel Programming. |
هذا هو كل شيء حول Spliterator في Java. المرجع: API Doc
Source:
https://www.digitalocean.com/community/tutorials/java-spliterator