logo

جافا 8 ستريم

توفر Java حزمة إضافية جديدة في Java 8 تسمى java.util.stream. تتكون هذه الحزمة من فئات وواجهات وتعداد للسماح بعمليات النمط الوظيفي على العناصر. يمكنك استخدام الدفق عن طريق استيراد حزمة java.util.stream.


يوفر الدفق الميزات التالية:

  • الدفق لا يخزن العناصر. فهو ببساطة ينقل عناصر من مصدر مثل بنية البيانات، أو المصفوفة، أو قناة الإدخال/الإخراج، من خلال سلسلة من العمليات الحسابية.
  • الدفق وظيفي بطبيعته. العمليات التي يتم إجراؤها على الدفق لا تعدل مصدرها. على سبيل المثال، تؤدي تصفية الدفق الذي تم الحصول عليه من مجموعة إلى إنشاء دفق جديد بدون العناصر المصفاة، بدلاً من إزالة العناصر من المجموعة المصدر.
  • الدفق كسول ويقوم بتقييم التعليمات البرمجية فقط عند الحاجة.
  • تتم زيارة عناصر الدفق مرة واحدة فقط خلال عمر الدفق. مثل التكرار، يجب إنشاء دفق جديد لإعادة زيارة نفس عناصر المصدر.

يمكنك استخدام الدفق للتصفية والتجميع والطباعة والتحويل من بنية بيانات إلى أخرى وما إلى ذلك. في الأمثلة التالية، قمنا بتطبيق عمليات مختلفة بمساعدة الدفق.

طرق واجهة جافا ستريم

طُرق وصف
allMatch المنطقية (المسند المسند) تقوم بإرجاع جميع عناصر هذا الدفق التي تطابق المسند المقدم. إذا كان الدفق فارغًا، فسيتم إرجاع true ولا يتم تقييم المسند.
منطقية AnyMatch (المسند المسند) تقوم بإرجاع أي عنصر من هذا الدفق الذي يطابق المسند المقدم. إذا كان الدفق فارغًا، فسيتم إرجاع خطأ ولا يتم تقييم المسند.
ثابت Stream.Builder منشئ () تقوم بإرجاع منشئ للدفق.
R جمع (جامع جامع) يقوم بتنفيذ عملية اختزال قابلة للتغيير على عناصر هذا الدفق باستخدام المجمع. يقوم المجمع بتغليف الوظائف المستخدمة كوسائط للتجميع (المورد، BiConsumer، BiConsumer)، مما يسمح بإعادة استخدام استراتيجيات التجميع وتكوين عمليات التجميع مثل التجميع أو التقسيم متعدد المستويات.
مجموعة R (مورد المورد، مجمع BiConsumer، مجمع BiConsumer) ينفذ عملية تخفيض قابلة للتغيير على عناصر هذا الدفق. التخفيض القابل للتغيير هو الذي تكون فيه القيمة المخفضة عبارة عن حاوية نتائج قابلة للتغيير، مثل ArrayList، ويتم دمج العناصر عن طريق تحديث حالة النتيجة بدلاً من استبدال النتيجة.
تيار ثابت (دفق أ ، دفق ب) يقوم بإنشاء دفق متسلسل بتكاسل تكون عناصره جميع عناصر الدفق الأول متبوعة بجميع عناصر الدفق الثاني. يتم ترتيب التدفق الناتج إذا كان كلا تدفقي الإدخال مرتبًا، ويكون متوازيًا إذا كان أي من تدفقات الإدخال متوازيًا. عندما يتم إغلاق التدفق الناتج، يتم استدعاء معالجات الإغلاق لكلا تدفقي الإدخال.
عدد طويل () تقوم بإرجاع عدد العناصر في هذا الدفق. هذه حالة خاصة من التخفيض.
دفق مميز () تقوم بإرجاع دفق يتكون من العناصر المميزة (وفقًا لـ Object.equals(Object)) لهذا الدفق.
دفق ثابت فارغ () تقوم بإرجاع دفق متسلسل فارغ.
مرشح الدفق (المسند المسند) تقوم بإرجاع دفق يتكون من عناصر هذا الدفق التي تطابق المسند المحدد.
اختياري findAny() تقوم بإرجاع اختياري يصف بعض عناصر الدفق، أو اختياري فارغ إذا كان الدفق فارغًا.
البحث الاختياري () تقوم بإرجاع اختياري يصف العنصر الأول في هذا الدفق، أو اختياري فارغ إذا كان الدفق فارغًا. إذا لم يكن للمجرى أي ترتيب لقاء، فقد يتم إرجاع أي عنصر.
دفق flatMap (Functionمصمم الخرائط) تقوم بإرجاع دفق يتكون من نتائج استبدال كل عنصر من هذا الدفق بمحتويات الدفق المعين الناتج عن تطبيق وظيفة التعيين المتوفرة على كل عنصر. يتم إغلاق كل دفق معين بعد وضع محتوياته في هذا الدفق. (إذا كان الدفق المعين خاليًا، فسيتم استخدام دفق فارغ بدلاً من ذلك.)
DoubleStream flatMapToDouble (مخطط الوظائف) تقوم بإرجاع DoubleStream الذي يتكون من نتائج استبدال كل عنصر من هذا الدفق بمحتويات الدفق المعين الناتج عن تطبيق وظيفة التعيين المتوفرة على كل عنصر. يتم إغلاق كل دفق معين بعد وضع محتوياته في هذا الدفق. (إذا كان الدفق المعين خاليًا، فسيتم استخدام دفق فارغ بدلاً من ذلك.)
IntStream flatMapToInt (مخطط الوظائف) تقوم بإرجاع IntStream يتكون من نتائج استبدال كل عنصر من هذا الدفق بمحتويات الدفق المعين الناتج عن تطبيق وظيفة التعيين المتوفرة على كل عنصر. يتم إغلاق كل دفق معين بعد وضع محتوياته في هذا الدفق. (إذا كان الدفق المعين خاليًا، فسيتم استخدام دفق فارغ بدلاً من ذلك.)
LongStream flatMapToLong (مخطط الوظائف) تقوم بإرجاع LongStream يتكون من نتائج استبدال كل عنصر من هذا الدفق بمحتويات الدفق المعين الناتج عن تطبيق وظيفة التعيين المتوفرة على كل عنصر. يتم إغلاق كل دفق معين بعد وضع محتوياته في هذا الدفق. (إذا كان الدفق المعين خاليًا، فسيتم استخدام دفق فارغ بدلاً من ذلك.)
باطلة لكل (إجراء المستهلك) ينفذ إجراءً لكل عنصر من عناصر هذا الدفق.
باطلة forEachOrdered (إجراء المستهلك) ينفذ إجراءً لكل عنصر من عناصر هذا الدفق، بترتيب لقاء الدفق إذا كان للدفق ترتيب لقاء محدد.
إنشاء دفق ثابت (الموردون) تقوم بإرجاع دفق متسلسل غير مرتب لا نهائي حيث يتم إنشاء كل عنصر بواسطة المورد المقدم. وهذا مناسب لتوليد تدفقات ثابتة، وتدفقات من العناصر العشوائية، وما إلى ذلك.
تكرار الدفق الثابت (Tseed،UnaryOperator f) تقوم بإرجاع تيار متسلسل لا نهائي تم إنتاجه عن طريق التطبيق التكراري للدالة f إلى بذرة عنصر أولي، مما ينتج عنه تيار يتكون من بذرة، f(بذرة)، f(f(بذرة))، إلخ.
حد الدفق (الحجم الأقصى الطويل) تقوم بإرجاع دفق يتكون من عناصر هذا الدفق، بحيث لا يزيد طوله عن الحد الأقصى.
خريطة التدفق (مخطط الوظائف) تقوم بإرجاع دفق يتكون من نتائج تطبيق الوظيفة المحددة على عناصر هذا الدفق.
DoubleStream MapToDouble (مخطط ToDoubleFunction) تقوم بإرجاع DoubleStream الذي يتكون من نتائج تطبيق الوظيفة المحددة على عناصر هذا الدفق.
IntStream MapToInt (مخطط ToIntFunction) تقوم بإرجاع IntStream الذي يتكون من نتائج تطبيق الوظيفة المحددة على عناصر هذا الدفق.
LongStream MapToLong (مخطط ToLongFunction) تقوم بإرجاع LongStream يتكون من نتائج تطبيق الوظيفة المحددة على عناصر هذا الدفق.
الحد الأقصى الاختياري (مقارنة المقارنة) تقوم بإرجاع الحد الأقصى لعنصر هذا الدفق وفقًا للمقارنة المتوفرة. هذه حالة خاصة من التخفيض.
الحد الأدنى الاختياري (مقارنة المقارنة) تقوم بإرجاع الحد الأدنى من عنصر هذا الدفق وفقًا للمقارنة المتوفرة. هذه حالة خاصة من التخفيض.
منطقية noneMatch (المسند المسند) تقوم بإرجاع عناصر هذا الدفق التي تطابق المسند المقدم. إذا كان الدفق فارغًا، فسيتم إرجاع true ولا يتم تقييم المسند.
@SafeVarargs الدفق الثابت لـ (قيم T...) تقوم بإرجاع دفق مرتب متسلسل عناصره هي القيم المحددة.
تيار ثابت من (T t) تقوم بإرجاع دفق متسلسل يحتوي على عنصر واحد.
نظرة خاطفة على الدفق (إجراء المستهلك) تقوم بإرجاع دفق يتكون من عناصر هذا الدفق، بالإضافة إلى تنفيذ الإجراء المقدم على كل عنصر حيث يتم استهلاك العناصر من الدفق الناتج.
تقليل اختياري (مجمع BinaryOperator) يقوم بإجراء تخفيض على عناصر هذا الدفق، باستخدام وظيفة التراكم الترابطي، وإرجاع اختياري يصف القيمة المخفضة، إن وجدت.
تقليل T (هوية T، مجمع BinaryOperator) يقوم بإجراء تخفيض على عناصر هذا الدفق، باستخدام قيمة الهوية المقدمة ووظيفة التراكم الترابطي، وإرجاع القيمة المخفضة.
تقليل U (هوية U، مجمع BiFunction، مجمع BinaryOperator) يقوم بإجراء تخفيض على عناصر هذا التدفق، وذلك باستخدام وظائف الهوية والتراكم والجمع المقدمة.
تخطي الدفق (طويل n) تقوم بإرجاع دفق يتكون من العناصر المتبقية من هذا الدفق بعد التخلص من العناصر n الأولى من الدفق. إذا كان هذا الدفق يحتوي على أقل من n من العناصر، فسيتم إرجاع دفق فارغ.
تم فرز الدفق () تقوم بإرجاع دفق يتكون من عناصر هذا الدفق، مرتبة حسب الترتيب الطبيعي. إذا كانت عناصر هذا المجرى غير قابلة للمقارنة، فقد يتم طرح java.lang.ClassCastException عند تنفيذ العملية الطرفية.
تيار فرزها (المقارنة المقارنة) تقوم بإرجاع دفق يتكون من عناصر هذا الدفق، مرتبة وفقًا للمقارنة المتوفرة.
الكائن [] إلى الصفيف () تقوم بإرجاع مصفوفة تحتوي على عناصر هذا الدفق.
A[] toArray (مولد IntFunction) تقوم بإرجاع مصفوفة تحتوي على عناصر هذا الدفق، باستخدام وظيفة المولد المتوفرة لتخصيص المصفوفة التي تم إرجاعها، بالإضافة إلى أي مصفوفات إضافية قد تكون مطلوبة لتنفيذ مقسم أو لتغيير الحجم.

مثال Java: تصفية المجموعة دون استخدام Stream

في المثال التالي، نقوم بتصفية البيانات دون استخدام الدفق. لقد استخدمنا هذا النهج قبل إصدار حزمة البث.

حجم المتجه c++
 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>

مثال دفق Java: تصفية المجموعة باستخدام Stream

هنا نقوم بتصفية البيانات باستخدام الدفق. يمكنك أن ترى أن هذا الكود قد تم تحسينه وصيانته. يوفر Stream التنفيذ السريع.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } 

انتاج:

 [90000.0] 

مثال تكرار دفق Java

يمكنك استخدام الدفق للتكرار أي عدد من المرات. يوفر Stream طرقًا محددة مسبقًا للتعامل مع المنطق الذي تقوم بتنفيذه. في المثال التالي، نقوم بالتكرار والتصفية وتمرير حد لإصلاح التكرار.

 import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } 

انتاج:

 5 10 15 20 25 

مثال دفق Java: التصفية والتكرار للمجموعة

في المثال التالي، نستخدم طريقة التصفية (). هنا، يمكنك أن ترى أن الكود محسّن وموجز للغاية.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } 

انتاج:

 Dell Laptop 

مثال دفق Java: طريقة تقليل () في المجموعة

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

في المثال التالي، نستخدم طريقة التخفيض () والتي تستخدم لجمع جميع أسعار المنتجات.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } 

انتاج:

 201000.0 201000.0 

مثال دفق Java: الجمع باستخدام طرق التجميع

يمكننا أيضًا استخدام المُجمعات لحساب مجموع القيم الرقمية. في المثال التالي، نستخدم فئة Collectors وطرقها المحددة لحساب مجموع كافة أسعار المنتجات.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } 

انتاج:

 201000.0 

مثال على تدفق Java: ابحث عن الحد الأقصى والحد الأدنى لسعر المنتج

المثال التالي يجد الحد الأدنى والحد الأقصى لسعر المنتج باستخدام الدفق. فهو يوفر طريقة ملائمة للعثور على القيم دون استخدام النهج الحتمي.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } 

انتاج:

 90000.0 25000.0 

مثال دفق Java: طريقة count() في المجموعة

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>

يتيح لك الدفق جمع نتيجتك بأي أشكال مختلفة. يمكنك الحصول على النتيجة كمجموعة أو قائمة أو خريطة ويمكنك إجراء معالجة على العناصر.


مثال دفق جافا: تحويل القائمة إلى مجموعة

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } 

انتاج:

 [25000.0, 28000.0] 

مثال دفق جافا: تحويل القائمة إلى خريطة

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } 

انتاج:

 {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} 

مرجع الطريقة في الدفق

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

انتاج:

 [90000.0]