logo

אספני ג'אווה

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

שיעור Java Collectors מספק שיטות שונות להתמודדות עם אלמנטים

שיטות תיאור
אספן סטטי ציבורי ממוצע של כפול (מפה של פונקציות ToDouble) הוא מחזיר Collector שמפיק את הממוצע האריתמטי של פונקציה בעלת ערך כפול המופעל על רכיבי הקלט. אם אין אלמנטים, התוצאה היא 0.
הפחתת אספן סטטי ציבורי (זהות T, הפעלה BinaryOperator) זה מחזיר Collector שמבצע הפחתה של רכיבי הקלט שלו תחת BinaryOperator שצוין באמצעות הזהות שסופקה.
אספן סטטי ציבוריreducing(BinaryOperator op) זה מחזיר Collector שמבצע הפחתה של רכיבי הקלט שלו תחת BinaryOperator מוגדר. התוצאה מתוארת כאופציונלית.
הפחתת אספן סטטי ציבורי (זהות U, ממפה פונקציות, הפעלה BinaryOperator) הוא מחזיר Collector שמבצע הפחתה של רכיבי הקלט שלו תחת פונקציית מיפוי מוגדרת ו-BinaryOperator. זוהי הכללה של הפחתת (Object, BinaryOperator) המאפשרת טרנספורמציה של האלמנטים לפני צמצום.
אספן סטטי ציבורי> groupingBy(מסווג פונקציות) הוא מחזיר Collector המיישם פעולת 'קבוצה לפי' על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג ומחזיר את התוצאות במפה.
אספן סטטי ציבוריgroupingBy(מסווג פונקציות, אספן במורד הזרם) הוא מחזיר Collector המיישם פעולת 'קבוצה לפי' מדורגת על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג, ולאחר מכן מבצע פעולת הפחתה על הערכים המשויכים למפתח נתון באמצעות ה-collector שצוין במורד הזרם.
סטטי ציבוריCollector groupingBy(מסווג פונקציות, מפת הספקFactory, Collector במורד הזרם) הוא מחזיר Collector המיישם פעולת 'קבוצה לפי' מדורגת על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג, ולאחר מכן מבצע פעולת הפחתה על הערכים המשויכים למפתח נתון באמצעות ה-collector שצוין במורד הזרם. המפה המיוצרת על ידי האספן נוצרת עם פונקציית המפעל שסופקה.
אספן סטטי ציבורי> groupingByConcurrent(מסווג פונקציות) הוא מחזיר Collector במקביל המיישם פעולת 'קבוצה לפי' על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג.
אספן סטטי ציבוריgroupingByConcurrent(מסווג פונקציות, אספן במורד הזרם) הוא מחזיר אספן בו-זמנית המיישם פעולת 'קבוצה לפי' מדורגת על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג, ולאחר מכן מבצע פעולת הפחתה על הערכים המשויכים למפתח נתון באמצעות אספן למטה שצוין.
סטטי ציבוריקיבוץ אספנים לפי במקביל (מסווג פונקציות, מפת ספק מפעל, אספן במורד הזרם) הוא מחזיר אספן בו-זמנית המיישם פעולת 'קבוצה לפי' מדורגת על רכיבי קלט מסוג T, מקבץ אלמנטים לפי פונקציית סיווג, ולאחר מכן מבצע פעולת הפחתה על הערכים המשויכים למפתח נתון באמצעות אספן למטה שצוין. ה-ConcurrentMap המיוצר על ידי האספן נוצר עם פונקציית המפעל שסופקה.
אספן סטטי ציבורי> partitioningBy(פרדיקט פרדיקט) זה מחזיר Collector שמחלק את רכיבי הקלט לפי פרדיקט, ומארגן אותם למפה . אין הבטחות לסוג, לשינוי, לסידרה או לבטיחות השרשור של המפה המוחזרת.
אספן סטטי ציבוריpartitioningBy(פרדיקט פרדיקט, אספן במורד הזרם) הוא מחזיר Collector שמחלק את רכיבי הקלט לפי Predicate, מקטין את הערכים בכל מחיצה לפי Collector אחר, ומארגן אותם למפה שהערכים שלה הם תוצאה של ההפחתה במורד הזרם.
אספן סטטי ציבוריtoMap(Function keyMapper, Function valueMapper) זה מחזיר Collector שצובר אלמנטים לתוך מפה שהמפתחות והערכים שלה הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
אספן סטטי ציבוריtoMap (פונקציה keyMapper, פונקציה valueMapper, BinaryOperator mergeFunction). זה מחזיר Collector שצובר אלמנטים לתוך מפה שהמפתחות והערכים שלה הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
סטטי ציבוריCollector toMap(פונקציה keyMapper, Function valueMapper, BinaryOperator mergeFunction, Supplier mapSupplier) זה מחזיר Collector שצובר אלמנטים לתוך מפה שהמפתחות והערכים שלה הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
אספן סטטי ציבוריtoConcurrentMap(Function keyMapper, Function valueMapper) הוא מחזיר Collector במקביל שצובר אלמנטים לתוך ConcurrentMap שהמפתחות והערכים שלו הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
אספן סטטי ציבוריtoConcurrentMap(Function keyMapper, Function valueMapper, BinaryOperator mergeFunction) הוא מחזיר Collector במקביל שצובר אלמנטים לתוך ConcurrentMap שהמפתחות והערכים שלו הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
סטטי ציבוריCollector toConcurrentMap (פונקציה keyMapper, Function valueMapper, BinaryOperator mergeFunction, ספק מפת ספק) הוא מחזיר Collector במקביל שצובר אלמנטים לתוך ConcurrentMap שהמפתחות והערכים שלו הם תוצאה של החלת פונקציות המיפוי שסופקו על רכיבי הקלט.
אספן סטטי ציבורי summarizingInt(מפה ToIntFunction) הוא מחזיר Collector אשר מחיל פונקציית מיפוי מייצרת אינט על כל רכיב קלט, ומחזיר סטטיסטיקות סיכום עבור הערכים המתקבלים.
אספן סטטי ציבורי מסכםLong(מפה ToLongFunction) זה מחזיר Collector שמחיל פונקציית מיפוי ארוכת שנים על כל רכיב קלט, ומחזיר סטטיסטיקות סיכום עבור הערכים המתקבלים.
אספן סטטי ציבורי מסכם Double(ToDoubleFunction ממפה) הוא מחזיר Collector שמחיל פונקציית מיפוי מייצרת כפולה על כל רכיב קלט, ומחזיר סטטיסטיקות סיכום עבור הערכים המתקבלים.

דוגמה ל-Java Collectors: שליפת נתונים כרשימה

 import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList; 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 CollectorsExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .map(x->x.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

תְפוּקָה:

 [25000.0, 30000.0, 28000.0, 28000.0, 90000.0] 

דוגמה ל-Java Collectors: המרת נתונים כסט

 import java.util.stream.Collectors; import java.util.Set; import java.util.List; import java.util.ArrayList; classProduct{ intid; String name; floatprice; public Product(intid, String name, floatprice) { this.id = id; this.name = name; this.price = price; } } publicclass CollectorsExample { publicstaticvoid main(String[] args) { ListproductsList = new ArrayList(); //Adding Products productsList.add(newProduct(1,'HP Laptop',25000f)); productsList.add(newProduct(2,'Dell Laptop',30000f)); productsList.add(newProduct(3,'Lenevo Laptop',28000f)); productsList.add(newProduct(4,'Sony Laptop',28000f)); productsList.add(newProduct(5,'Apple Laptop',90000f)); SetproductPriceList = productsList.stream() .map(x->x.price) // fetching price .collect(Collectors.toSet()); // collecting as list System.out.println(productPriceList); } } 

תְפוּקָה:

 [25000.0, 30000.0, 28000.0, 90000.0] 

דוגמה ל-Java Collectors: שימוש בשיטת sum

 import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList; 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 CollectorsExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); Double sumPrices = productsList.stream() .collect(Collectors.summingDouble(x->x.price)); // collecting as list System.out.println('Sum of prices: '+sumPrices); Integer sumId = productsList.stream().collect(Collectors.summingInt(x->x.id)); System.out.println('Sum of id's: '+sumId); } } 

תְפוּקָה:

 Sum of prices: 201000.0 Sum of id's: 15 

דוגמה ל-Java Collectors: קבלת מחיר ממוצע למוצר

 import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList; 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 CollectorsExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); Double average = productsList.stream() .collect(Collectors.averagingDouble(p->p.price)); System.out.println('Average price is: '+average); } } 

תְפוּקָה:

 Average price is: 40200.0 

דוגמה ל-Java Collectors: ספירת אלמנטים

 import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList; class Product{ intid; String name; floatprice; public Product(intid, String name, floatprice) { this.id = id; this.name = name; this.price = price; } publicint getId() { returnid; } public String getName() { returnname; } publicfloat getPrice() { returnprice; } } publicclass CollectorsExample { publicstaticvoid main(String[] args) { ListproductsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); Long noOfElements = productsList.stream() .collect(Collectors.counting()); System.out.println('Total elements : '+noOfElements); } } 

תְפוּקָה:

 Total elements : 5