معظم المتكررين والأساليب المتكررة كسول! ماذا يعني هذا

StackOverflow https://stackoverflow.com/questions/2155788

سؤال

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().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top