Stream.mapMulti()
أصدر صفراً أو أكثر من العناصر لكل إدخال دون إنشاء Streams وسيطة.
مقارنة الكود
✕ Java 8
stream.flatMap(order ->
order.items().stream()
.map(item -> new OrderItem(
order.id(), item)
)
);
✓ Java 16+
stream.<OrderItem>mapMulti(
(order, downstream) -> {
for (var item : order.items())
downstream.accept(
new OrderItem(order.id(), item));
}
);
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
تخصيص أقل
لا Stream وسيطة تُنشأ لكل عنصر.
أسلوب إمراطي
استخدم الحلقات والشروط مباشرةً.
مرن
أصدر صفراً أو واحداً أو عناصر كثيرة بتحكم كامل.
الأسلوب القديم
flatMap + List
الأسلوب الحديث
mapMulti()
منذ JDK
16
الصعوبة
متوسط
دعم JDK
Stream.mapMulti()
متاح
متاح على نطاق واسع منذ JDK 16 (مارس 2021)
كيف يعمل
mapMulti() بديل إمراطي لـ flatMap يتجنّب إنشاء كائنات Stream وسيطة لكل عنصر. أكثر كفاءةً عندما ينتج التعيين عدداً صغيراً من العناصر.
توثيق ذو صلة