logo

طريقة flatMap () في Java 8

ال تدفق تم تقديم واجهة برمجة التطبيقات (API) في جافا 8 الذي يستخدم لمعالجة مجموعات الكائنات. ويمكن استخدامه عن طريق استيراد java.util.stream طَرد. في هذا القسم سنناقش Stream.flatMap () طريقة Stream API. وسنناقش أيضًا الاختلافات الرئيسية بين طريقة Stream.flatMap () وطريقة Stream.map () في Java 8.

تاريخ جافا الآن
طريقة flatMap () في Java 8

قبل الانتقال إلى الموضوع، أولا، سوف نفهم خريطة الدفق () طريقة. بسبب ال خريطة مسطحة() تعتمد الطريقة على خريطة() طريقة.

طريقة Java Stream.map()

ال خريطة الدفق () تقوم الطريقة بعملية وسيطة باستخدام وظيفة مخطط الخرائط. وينتج دفق جديد لكل عنصر. فهو يحول جميع التدفقات إلى تيار واحد لتقديم النتيجة. لذلك، يتم تحويل كل عنصر من عناصر الدفق إلى دفق جديد.

بناء الجملة:

 Stream map(Function mapper) 

ص: إنها معلمة نوع تمثل نوع عنصر الدفق الجديد.

مصمم الخرائط: إنها معلمة غير متداخلة، وظيفة عديمة الحالة يتم تطبيقها على كل عنصر.

مثال على طريقة الخريطة ().

 List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList()); 

النظر في البيان أعلاه للحصول على خريطة لل تدفق . يقوم بإنشاء دفق ناتج باستخدام الخريطة (). في كل تكرار، يقوم Map() بإنشاء دفق منفصل بالنتيجة عن طريق تنفيذ وظيفة مخطط الخرائط. أخيرًا، تقوم الخريطة () بتحويل جميع التدفقات إلى تدفق واحد.

MapExample.java

 import java.util.*; public class MapExample { public static void main(String args[]) { System.out.println('Stream After applying the map() function: '); //creats a list of integers List list = Arrays.asList(12, 45, 67, 19, 87, 2, 9); //creating a new stream of the elements an prints the same using the foreach loop list.stream().map(number -> number * 2).forEach(System.out::println); } } 

انتاج:

 Stream After applying the map() function: 24 90 134 38 174 4 18 

طريقة جافا Stream.flatMap ().

في جافا 8 التدفقات، تطبق طريقة flatMap () العملية كوظيفة مخطط وتوفر دفقًا من قيم العناصر. وهذا يعني أنه في كل تكرار لكل عنصر، تقوم طريقة Map() بإنشاء دفق جديد منفصل. باستخدام آلية التسطيح، يتم دمج جميع التدفقات في تيار ناتج واحد. باختصار، يتم استخدامه لتحويل دفق الدفق إلى قائمة القيم.

بناء الجملة:

 Stream flatMap(Function<? super T,? extends Stream> mapper) 

تأخذ الطريقة دالة كوسيطة. يقبل T كمعلمة ويعيد دفقًا من R.

ص: إنها معلمة نوع تمثل نوع عنصر الدفق الجديد.

مصمم الخرائط: إنها معلمة عبارة عن وظيفة غير متداخلة وعديمة الحالة يتم تطبيقها على كل عنصر. وتنتج تيارًا من القيم الجديدة.

باختصار، يمكننا القول أن طريقة flatMap() تساعد في التحويل تدفق ل تدفق . إنه يؤدي تسطيح (مسطحة أو تتسطح) و رسم الخرائط (الخريطة)، في وقت واحد. تجمع طريقة Stream.flatMap() بين العمليتين، أي المسطحة والخريطة.

 flatMap() = Flattening (flat)+ mapping (map) 

دعونا نفهم معنى التسطيح.

ما هو التسطيح؟

تسطيح هي عملية تحويل عدة قوائم من القوائم ودمج كل تلك القوائم لإنشاء قائمة واحدة تحتوي على جميع العناصر من جميع القوائم.

تنسيق السلسلة جافا

مثال التسطيح

خذ بعين الاعتبار قوائم القوائم التالية:

قبل التسطيح: [[1، 2، 3، 4]، [7، 8، 9، 0]، [5، 6]، [12، 18، 19، 20، 17]، [22]]

بعد التسطيح: [1، 2، 3، 4، 7، 8، 9، 0، 5، 6، 12، 18، 19، 20، 17، 22]

مثال على طريقة flatMap()

 List country = Stream.of(Arrays.asList(&apos;Colombia&apos;, &apos;Finland&apos;, &apos;Greece&apos;, &apos;Iceland&apos;, &apos;Liberia&apos;, &apos;Mali&apos;, &apos;Mauritius&apos;), Arrays.asList(&apos;Peru&apos;, &apos;Serbia&apos;, &apos;Singapore&apos;, &apos;Turkey&apos;, &apos;Uzbekistan&apos;, &apos;Yemen&apos;, &apos;Zimbabwe&apos;, &apos;Greece&apos;, &apos;Iceland&apos;)).flatMap(List::stream) .collect(Collectors.toList()); 

يمكننا استخدام طريقة flatMap () في الدفق باستخدام وظيفة مخطط الخرائط List::stream. عند تنفيذ عملية محطة الدفق، يوفر كل عنصر من عناصر flatMap() دفقًا منفصلاً. في المرحلة النهائية، تقوم طريقة flatMap() بتحويل كافة التدفقات إلى تدفق جديد. في الدفق أعلاه، نلاحظ أنه لا يحتوي على قيم مكررة.

لنقم بإنشاء برنامج Java واستخدام طريقة flatMap ().

FlatMapExample.java

 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FlatmapExample { public static void main(String args[]) { //creating ArrayList List productlist1 = Arrays.asList(&apos;Printer&apos;, &apos;Mouse&apos;, &apos;Keyboard&apos;, &apos;Motherboard&apos;); List productlist2 = Arrays.asList(&apos;Scanner&apos;, &apos;Projector&apos;, &apos;Light Pen&apos;); List productlist3 = Arrays.asList(&apos;Pen Drive&apos;, &apos;Charger&apos;, &apos;WIFI Adapter&apos;, &apos;Cooling Fan&apos;); List productlist4 = Arrays.asList(&apos;CPU Cabinet&apos;, &apos;WebCam&apos;, &apos;USB Light&apos;, &apos;Microphone&apos;, &apos;Power cable&apos;); List<list> allproducts = new ArrayList<list>(); //adding elements to the list allproducts.add(productlist1); allproducts.add(productlist2); allproducts.add(productlist3); allproducts.add(productlist4); //creating a list of all products List listOfAllProducts = new ArrayList(); //for each loop iterates over the list for(List pro : allproducts) { for(String product : pro) { //adds all products to the list listOfAllProducts.add(product); } } System.out.println(&apos;List Before Applying mapping and Flattening: 
&apos;); //prints stream before applying the flatMap() method System.out.println(listOfAllProducts); System.out.println(); //creats a stream of elemnts using flatMap() List flatMapList = allproducts .stream().flatMap(pList -&gt; pList.stream()).collect(Collectors.toList()); System.out.println(&apos;List After Applying Mapping and Flattening Operation: 
&apos;); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>

انتاج:

 List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] 

لقد فهمنا الآن كلتا الطريقتين الخاصتين بفئة Stream. حيث يمكننا بسهولة الإشارة إلى الاختلافات الرئيسية بينهما.

Stream.flatMap () مقابل. خريطة الدفق ()

يصف الجدول التالي الاختلافات الرئيسية بين Stream.flatMap() وStream.map().

يعني مقابل المتوسط
طريقة flatMap () في Java 8
Stream.flatMap () خريطة الدفق ()
يعالج دفق قيم الدفق. يعالج تدفق القيم.
ينفذ رسم الخرائط جنبا إلى جنب مع التسطيح. ينفذ رسم الخرائط فقط.
يقوم بتحويل البيانات من Streamللدفق. يقوم بتحويل البيانات من دفق إلى دفق.
ويستخدم رسم الخرائط واحد لكثير. ويستخدم رسم الخرائط واحد لواحد.
تنتج وظيفة مخطط الخرائط قيمًا متعددة (دفق القيم) لكل قيمة إدخال. تقوم وظيفة مخطط الخرائط بإنتاج قيم فردية لكل قيمة إدخال.
استخدم طريقة flatMap () عندما تقوم وظيفة مخطط الخرائط بإنتاج قيم متعددة لكل قيمة إدخال. استخدم طريقة الخريطة () عندما تقوم وظيفة مخطط الخرائط بإنتاج قيم فردية لكل قيمة إدخال.