Java 8 זרם דלג () לעומת מגבלה ()

1. הקדמה

במאמר קצר זה נדבר על ה- לדלג() ו לְהַגבִּיל() שיטות ה- API של Java Stream ומדגישות את הדמיון וההבדל ביניהן.

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

2. ה לדלג() שיטה

ה דלג (n) השיטה היא פעולת ביניים שזורקת את הראשונה נ אלמנטים של זרם. ה נ הפרמטר לא יכול להיות שלילי, ואם הוא גבוה מגודל הזרם, לדלג() מחזיר זרם ריק.

בואו נראה דוגמה:

Stream.of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .filter (i -> i% 2 == 0). הספינה (2) .forEach (i -> System. out.print (i + ""));

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

6 8 10

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

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

3. ה לְהַגבִּיל() שיטה

ה מגבלה (n) שיטה היא אחרת פעולת ביניים המחזירה זרם שאינו ארוך מהגודל המבוקש. כמו קודם, נ הפרמטר לא יכול להיות שלילי.

בואו נשתמש בזה בדוגמה:

Stream.of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10). Filter (i -> i% 2 == 0). Limit (2) .forEach (i -> System. out.print (i + "");

במקרה זה, אנו קולטים רק שני מספרים זוגיים מזרם שלנו int:

2 4

כמו שקורה עם לדלג() מבצע, לְהַגבִּיל() היא גם פעולה ממלכתית מכיוון שהיא חייבת לשמור על מצב הפריטים שנאספים.

אבל בניגוד לדלג(), אשר צורכת את כל הזרם, ברגע ש לְהַגבִּיל() מגיע למספר המקסימלי של פריטים, הוא לא צורך עוד פריטים ופשוט מחזיר את הזרם שנוצר. לָכֵן, אנחנו אומרים את זה לְהַגבִּיל() היא פעולת קצר.

כשעובדים עם זרמים אינסופיים, לְהַגבִּיל() יכול להיות מאוד שימושי לקיצור זרם לזרם סופי:

Stream.iterate (0, i -> i + 1) .filter (i -> i% 2 == 0) .limit (10) .forEach (System.out :: println);

בדוגמה זו אנו מקטעים זרם אינסופי של מספרים לזרם עם עשרה מספרים זוגיים בלבד.

4. שילוב לדלג() ו לְהַגבִּיל()

כפי שהזכרנו קודם, לדלג ו לְהַגבִּיל הפעולות משלימות, ואם נשלב ביניהן, הן יכולות לעזור מאוד במקרים מסוימים.

בואו נדמיין שאנחנו רוצים לשנות את הדוגמה הקודמת שלנו כך שהיא תקבל מספרים זוגיים בקבוצות של עשר. אנו יכולים לעשות זאת פשוט באמצעות שניהם לדלג() ו לְהַגבִּיל() באותו זרם:

רשימה סטטית פרטית getEvenNumbers (int offset, int limit) {return Stream.iterate (0, i -> i + 1). filter (i -> i% 2 == 0). ship (offset) .limit (limit). אסוף (Collectors.toList ()); }

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

5. מסקנה

במאמר קצר זה הראינו את הדמיון והשוני של ה- לדלג() ו לְהַגבִּיל() שיטות ה- API של Java Stream. יישמנו גם כמה דוגמאות פשוטות כדי להראות כיצד נוכל להשתמש בשיטות אלה.

כמו תמיד, קוד המקור המלא של הדוגמאות זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found