logo

זרם Java 8

Java מספקת חבילה נוספת חדשה ב-Java 8 בשם java.util.stream. חבילה זו מורכבת ממחלקות, ממשקים ו-enum כדי לאפשר פעולות בסגנון פונקציונלי על האלמנטים. אתה יכול להשתמש בזרם על ידי ייבוא ​​חבילת java.util.stream.


Stream מספק את התכונות הבאות:

  • Stream אינו מאחסן אלמנטים. הוא פשוט מעביר אלמנטים ממקור כגון מבנה נתונים, מערך או ערוץ קלט/פלט, דרך צינור של פעולות חישוביות.
  • זרם הוא פונקציונלי באופיו. פעולות המבוצעות בזרם אינן משנות את המקור שלו. לדוגמה, סינון של Stream המתקבל מאוסף מייצר Stream חדש ללא האלמנטים המסוננים, במקום הסרת אלמנטים מאוסף המקור.
  • הזרם עצלן ומעריך קוד רק כאשר נדרש.
  • מרכיבים של נחל מבקרים רק פעם אחת במהלך חייו של נחל. כמו איטרטור, יש ליצור זרם חדש כדי לבקר מחדש באותם אלמנטים של המקור.

אתה יכול להשתמש בזרם כדי לסנן, לאסוף, להדפיס ולהמיר ממבנה נתונים אחד למשנהו וכו'. בדוגמאות הבאות, יש לנו פעולות שונות בעזרת הזרם.

שיטות ממשק זרם Java

שיטות תיאור
boolean allMatch (פרדיקט פרידיקט) זה מחזיר את כל הרכיבים של זרם זה התואמים את הפרדיקט המסופק. אם הזרם ריק, true מוחזר והפרדיקט אינו מוערך.
boolean anyMatch (פרדיקט פרידיקט) הוא מחזיר כל רכיב בזרם הזה שתואם את הפרדיקט שסופק. אם הזרם ריק, ה-false מוחזר והפרדיקט אינו מוערך.
סטטי Stream.Builder builder() זה מחזיר בונה עבור זרם.
R collect (אספן אספן) הוא מבצע פעולת הפחתה ניתנת לשינוי על רכיבי הזרם הזה באמצעות Collector. Collector מקפל את הפונקציות המשמשות כארגומנטים לאיסוף (ספק, BiConsumer, BiConsumer), ומאפשר שימוש חוזר באסטרטגיות איסוף והרכב פעולות איסוף כגון קיבוץ רב-רמות או חלוקה למחיצות.
R collect (ספק ספק, מצבר BiConsumer, Combiner BiConsumer) הוא מבצע פעולת הפחתה ניתנת לשינוי על האלמנטים של זרם זה. הפחתה ניתנת לשינוי היא כזו שבה הערך המופחת הוא מיכל תוצאה שניתן לשינוי, כגון ArrayList, ואלמנטים משולבים על ידי עדכון מצב התוצאה במקום על ידי החלפת התוצאה.
חיבור זרם סטטי (זרם א, זרם ב) זה יוצר זרם משורשר בעצלתיים שכל האלמנטים שלו הם כל האלמנטים של הזרם הראשון ואחריו כל האלמנטים של הזרם השני. הזרם המתקבל מסודר אם שני זרמי הקלט מסודרים, ומקביל אם אחד מזרמי הקלט מקביל. כאשר הזרם המתקבל נסגר, המטפלים הסגורים עבור שני זרמי הקלט מופעלים.
ספירה ארוכה() זה מחזיר את ספירת האלמנטים בזרם הזה. זהו מקרה מיוחד של הפחתה.
Stream distinct() הוא מחזיר זרם המורכב מהאלמנטים הנבדלים (לפי Object.equals(Object)) של זרם זה.
זרם סטטי ריק () זה מחזיר זרם רציף ריק.
מסנן זרם (פרדיקט פרדיקט) הוא מחזיר זרם המורכב מהמרכיבים של זרם זה התואמים את הפרדיקט הנתון.
אופציונלי findAny() זה מחזיר אופציונלי המתאר רכיב כלשהו של הזרם, או אופציונלי ריק אם הזרם ריק.
אופציונלי findFirst() הוא מחזיר אופציונלי המתאר את הרכיב הראשון של זרם זה, או אופציונלי ריק אם הזרם ריק. אם לזרם אין סדר מפגש, ניתן להחזיר כל רכיב.
Stream flatMap (פונקציהממפה) הוא מחזיר זרם המורכב מהתוצאות של החלפת כל רכיב בזרם זה בתוכן של זרם ממופה המופק על ידי יישום פונקציית המיפוי שסופקה על כל אלמנט. כל זרם ממופה נסגר לאחר שהתוכן שלו הוכנס לזרם זה. (אם זרם ממופה הוא ריק, נעשה שימוש בזרם ריק, במקום זאת.)
DoubleStream flatMapToDouble(מפה פונקציות) הוא מחזיר DoubleStream המורכב מהתוצאות של החלפת כל רכיב בזרם זה בתוכן של זרם ממופה המופק על ידי החלת פונקציית המיפוי שסופקה על כל אלמנט. כל זרם ממופה נסגר לאחר שהתוכן שלו הוכנס לזרם זה. (אם זרם ממופה הוא ריק, נעשה שימוש בזרם ריק, במקום זאת.)
IntStream flatMapToInt(מפה פונקציות) הוא מחזיר IntStream המורכב מהתוצאות של החלפת כל רכיב בזרם זה בתוכן של זרם ממופה המופק על ידי החלת פונקציית המיפוי שסופקה על כל אלמנט. כל זרם ממופה נסגר לאחר שהתוכן שלו הוכנס לזרם זה. (אם זרם ממופה הוא ריק, נעשה שימוש בזרם ריק, במקום זאת.)
LongStream flatMapToLong(מפה פונקציות) הוא מחזיר LongStream המורכב מהתוצאות של החלפת כל רכיב בזרם זה בתוכן של זרם ממופה המופק על ידי החלת פונקציית המיפוי שסופקה על כל אלמנט. כל זרם ממופה נסגר לאחר שהתוכן שלו הוכנס לזרם זה. (אם זרם ממופה הוא ריק, נעשה שימוש בזרם ריק, במקום זאת.)
void forEach (פעולת צרכן) הוא מבצע פעולה עבור כל רכיב בזרם הזה.
void forEachOrdered(פעולת צרכן) הוא מבצע פעולה עבור כל אלמנט של זרם זה, בסדר המפגש של הזרם אם לזרם יש סדר מפגש מוגדר.
יצירת זרם סטטי (ספקים) הוא מחזיר זרם אינסופי רציף לא מסודר שבו כל אלמנט נוצר על ידי הספק שסופק. זה מתאים ליצירת זרמים קבועים, זרמים של אלמנטים אקראיים וכו'.
איטרציה של זרם סטטי (T seed, UnaryOperator f) הוא מחזיר זרם מסודר רציף אינסופי שנוצר על ידי יישום איטרטיבי של פונקציה f לזרע אלמנט ראשוני, מייצר זרם המורכב מזרע, f(זרע), f(f(זרע)) וכו'.
מגבלת זרם (Long MaxSize) הוא מחזיר זרם המורכב מהרכיבים של הזרם הזה, קטוע באורך של לא יותר מ-maxSize.
מפת זרם (מפה פונקציות) הוא מחזיר זרם המורכב מתוצאות החלת הפונקציה הנתונה על האלמנטים של זרם זה.
DoubleStream mapToDouble(מפה ToDoubleFunction) הוא מחזיר DoubleStream המורכב מהתוצאות של החלת הפונקציה הנתונה על האלמנטים של זרם זה.
IntStream mapToInt(ToIntFunction ממפה) הוא מחזיר IntStream המורכב מהתוצאות של החלת הפונקציה הנתונה על האלמנטים של זרם זה.
LongStream mapToLong(מפה ToLongFunction) הוא מחזיר LongStream המורכב מהתוצאות של החלת הפונקציה הנתונה על האלמנטים של זרם זה.
מקסימום אופציונלי (השוואה משווה) הוא מחזיר את הרכיב המקסימלי של זרם זה לפי ה-Comparator שסופק. זהו מקרה מיוחד של הפחתה.
אופציונלי min(Comparator comparator) הוא מחזיר את האלמנט המינימלי של זרם זה לפי ה-Comparator שסופק. זהו מקרה מיוחד של הפחתה.
בוליאני noneMatch (פרדיקט פרידיקט) הוא מחזיר אלמנטים של זרם זה תואמים לפרדיקט שסופק. אם הזרם ריק, true מוחזר והפרדיקט אינו מוערך.
@SafeVarargs זרם סטטי של (T... ערכי) הוא מחזיר זרם מסודר ברצף שהאלמנטים שלו הם הערכים שצוינו.
זרם סטטי של (T t) הוא מחזיר זרם רציף המכיל אלמנט בודד.
הצצה בזרם (פעולת צרכנים) הוא מחזיר זרם המורכב מהאלמנטים של הזרם הזה, בנוסף מבצע את הפעולה שסופקה על כל אלמנט כאשר אלמנטים נצרכים מהזרם שנוצר.
הפחתה אופציונלית (מצבר BinaryOperator) הוא מבצע הפחתה על הרכיבים של זרם זה, תוך שימוש בפונקציית צבירה אסוציאטיבית, ומחזיר אופציונלי המתאר את הערך המופחת, אם בכלל.
T להפחית (זהות T, מצבר BinaryOperator) הוא מבצע הפחתה על הרכיבים של זרם זה, תוך שימוש בערך הזהות שסופק ופונקציית צבירה אסוציאטיבית, ומחזיר את הערך המופחת.
U להפחית (זהות U, מצבר BiFunction, Combiner BinaryOperator) הוא מבצע הפחתה של מרכיבי הזרם הזה, תוך שימוש בזהות, צבירה ושילוב של פונקציות.
דילוג על זרם (ארוך n) הוא מחזיר זרם המורכב מהרכיבים הנותרים של זרם זה לאחר השלכת n האלמנטים הראשונים של הזרם. אם זרם זה מכיל פחות מ-n אלמנטים, זרם ריק יוחזר.
זרם מסודר() הוא מחזיר זרם המורכב ממרכיבי הנחל הזה, ממוין לפי סדר טבעי. אם הרכיבים של זרם זה אינם ניתנים להשוואה, ייתכן ש-java.lang.ClassCastException יופיע בעת ביצוע פעולת הטרמינל.
זרם ממוין (השוואה משווה) הוא מחזיר זרם המורכב מהמרכיבים של זרם זה, ממוין לפי ה-Comparator שסופק.
Object[] toArray() הוא מחזיר מערך המכיל את האלמנטים של זרם זה.
A[] toArray(מחולל IntFunction) הוא מחזיר מערך המכיל את הרכיבים של זרם זה, תוך שימוש בפונקציית המחולל שסופקה כדי להקצות את המערך המוחזר, כמו גם כל מערכים נוספים שעשויים להידרש לביצוע מחולקת או לשינוי גודל.

דוגמה של Java: אוסף סינון ללא שימוש ב-Stream

בדוגמה הבאה, אנו מסננים נתונים מבלי להשתמש בזרם. בגישה זו אנו משתמשים לפני שחבילת הסטרימינג שוחררה.

שם של
 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

כאן, אנו מסננים נתונים באמצעות זרם. אתה יכול לראות שהקוד מותאם ומתוחזק. 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 Iterating

אתה יכול להשתמש בזרם כדי לחזור על כל מספר פעמים. 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: אוסף סינון ואיטרציה

בדוגמה הבאה, אנו משתמשים בשיטת filter(). כאן אתה יכול לראות שהקוד מותאם ותמציתי מאוד.

 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: שיטה reduce() באוסף

שיטה זו לוקחת רצף של רכיבי קלט ומשלבת אותם לתוצאת סיכום אחת על ידי פעולה חוזרת. לדוגמה, מציאת סכום המספרים, או צבירת אלמנטים לרשימה.

בדוגמה הבאה, אנו משתמשים בשיטת reduce() המשמשת לסיכום כל מחירי המוצרים.

 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 Stream: מצא מחיר מוצר מקסימלי ומינימלי

הדוגמה הבאה מוצאת מחיר מוצר מינימלי ומקסימלי באמצעות זרם. זה מספק דרך נוחה למצוא ערכים מבלי להשתמש בגישה הכרחית.

 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 Stream דוגמה: 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)>

stream מאפשר לך לאסוף את התוצאה שלך בכל צורות שונות. אתה יכול לקבל את התוצאה שלך כסט, רשימה או מפה ויכול לבצע מניפולציה על האלמנטים.


דוגמה של זרם Java: המר רשימה לסט

 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] 

דוגמה ל-Java 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)); // 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]