Stream.iterate() مع Predicate
استخدم Predicate لإيقاف التكرار — مثل حلقة for في صيغة Stream.
مقارنة الكود
✕ Java 8
Stream.iterate(1, n -> n * 2)
.limit(10)
.forEach(System.out::println);
// can't stop at a condition
✓ Java 9+
Stream.iterate(
1,
n -> n < 1000,
n -> n * 2
).forEach(IO::println);
// stops when n >= 1000
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
إنهاء طبيعي
توقف بناءً على شرط لا بحد تعسفي.
مكافئ حلقة for
نفس دلالات for(seed; hasNext; next).
لا خطر Stream لا نهائي
Predicate يضمن الإنهاء.
الأسلوب القديم
iterate + limit
الأسلوب الحديث
iterate(seed, pred, op)
منذ JDK
9
الصعوبة
متوسط
دعم JDK
Stream.iterate() مع Predicate
متاح
متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)
كيف يعمل
تعمل Stream.iterate(seed, hasNext, next) ثلاثية الوسائط كحلقة for: seed هو البداية و hasNext يُحدّد متى تتوقف و next تُنتج القيمة التالية.
توثيق ذو صلة