معظم المتكررين والأساليب المتكررة كسول! ماذا يعني هذا
-
23-09-2019 - |
سؤال
1 من العرض التقديمي يقول "هذه الطرق كسول!"
Iterable transform(Iterable, Function)*
Iterable filter(Iterable, Predicate)*
T find(Iterable<T>, Predicate)
Iterable concat(Iterable<Iterable>)
Iterable cycle(Iterable)
T getOnlyElement(Iterable<T>)
Iterable<T> reverse(List<T>)
هل يمكن لأي شخص مساعدتي في فهم ما يقصده بهذا ، دعنا نقول إنني مجموعة من Persons
وأطبق مرشحًا لإرجاع الأشخاص الذين اسمهم الأخير فقط.
فهل هذا يعني أن "التصفية يحدث فقط في الدعوة الأولى إلى doeonly.next ()؟"
List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
المحلول
هذا يعني أنه يتم ترشيح البيانات حسب طلبها - لا تمر عبر قائمتك على الفور ، وإنشاء قائمة جديدة من البيانات المصفاة. بدلاً من ذلك ، عندما تتصل iterator.next()
(على سبيل المثال ، تلقائيًا في حلقة مُحسّنة) ، سيسأل Iterator مصدر بيانات المنبع (مجموعتك) لعنصر البيانات التالي. سيحاول بعد ذلك مطابقة هذا مع المرشح. إذا كان يطابقه ، فسوف يعيد هذا العنصر. خلاف ذلك ، سوف يطلب عنصرًا آخر من المجموعة ، ويستمر حتى ينفد عن العناصر أو يجد تطابقًا.
ثم عندما أنت التالي اطلب العنصر التالي ، سوف يستمر من حيث توقف.
بمعنى آخر ، هذا لا يعني فقط أن "التصفية يحدث فقط في المكالمة الأولى إلى doeOnly.next()
" - هذا يعني" التصفية يحدث على كل دعوة ل iterator.next()
" أين iterator
هو نتيجة الاتصال doeOnly.iterator()
.