Collectors.flatMapping()
استخدم flatMapping() للتسطيح داخل مُجمِّع grouping.
مقارنة الكود
✕ Java 8
// Flatten within a grouping collector
// Required complex custom collector
Map<String, Set<String>> tagsByDept =
// no clean way in Java 8
✓ Java 9+
var tagsByDept = employees.stream()
.collect(groupingBy(
Emp::dept,
flatMapping(
e -> e.tags().stream(),
toSet()
)
));
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
قابل للتركيب
يعمل كمُجمِّع فرعي داخل groupingBy.
تمريرة واحدة
سطّح وجمّع في تمريرة Stream واحدة.
قابل للتداخل
ادمجه مع مُجمِّعات فرعية أخرى.
الأسلوب القديم
flatMap متداخل
الأسلوب الحديث
flatMapping()
منذ JDK
9
الصعوبة
متوسط
دعم JDK
Collectors.flatMapping()
متاح
متاح على نطاق واسع منذ JDK 9 (سبتمبر 2017)
كيف يعمل
يُطبّق Collectors.flatMapping() تعييناً من-واحد-إلى-كثير كمُجمِّع فرعي. وهو مكافئ المُجمِّع لـ Stream.flatMap() — مفيد داخل groupingBy أو partitioningBy.
توثيق ذو صلة