Java 8 Streams הצצה () API

1. הקדמה

ממשק ה- API של Java Stream מציג בפנינו אלטרנטיבה עוצמתית לעיבוד נתונים.

במדריך קצר זה נתמקד לְהָצִיץ(), שיטה שלא מובנת לעיתים קרובות.

2. דוגמה מהירה

בואו נלכלך את הידיים וננסה להשתמש לְהָצִיץ(). יש לנו זרם שמות ואנחנו רוצים להדפיס אותם למסוף.

מאז לְהָצִיץ() מצפה א צרכן כטיעון היחיד שלה, זה נראה מתאים, אז בואו ננסה את זה:

זרם nameStream = Stream.of ("אליס", "בוב", "צ'אק"); nameStream.peek (System.out :: println);

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

3. פעולות ביניים לעומת מסופים

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

המקור מספק את האלמנטים לצינור.

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

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

4. לְהָצִיץ() נוֹהָג

הסיבה לְהָצִיץ() לא עבד בדוגמה הראשונה שלנו זה זה ביניים פעולה ולא יישמנו א מָסוֹף מבצע לצינור. לחלופין, היינו יכולים להשתמש לכל אחד() עם אותו טיעון כדי לקבל את ההתנהגות הרצויה:

זרם nameStream = Stream.of ("אליס", "בוב", "צ'אק"); nameStream.forEach (System.out :: println);

לְהָצִיץ()בדף Javadoc כתוב: “שיטה זו קיימת בעיקר לתמיכה באגים, שם ברצונך לראות את האלמנטים כאשר הם זורמים מעבר לנקודה מסוימת בצינור“.

בואו ניקח בחשבון קטע זה מאותו עמוד Javadoc:

Stream.of ("one", "two", "three", "four") .filter (e -> e.length ()> 3) .peek (e -> System.out.println ("ערך מסונן: "+ e)) .map (String :: toUpperCase) .peek (e -> System.out.println (" ערך ממופה: "+ e)) .collect (Collectors.toList ());

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

נוסף על כך, לְהָצִיץ() יכול להיות שימושי בתרחיש אחר: מתי אנו רוצים לשנות את המצב הפנימי של אלמנט. לדוגמה, נניח שאנחנו רוצים להמיר את כל שם המשתמש לאותיות קטנות לפני שמדפיסים אותם:

זרם userStream = Stream.of (משתמש חדש ("אליס"), משתמש חדש ("בוב"), משתמש חדש ("צ'אק")); userStream.peek (u -> u.setName (u.getName (). toLowerCase ())). forEach (System.out :: println);

לחלופין, היינו יכולים להשתמש מַפָּה(), אבל לְהָצִיץ() נוח יותר מכיוון שאיננו רוצים להחליף את האלמנט.

5. מסקנה

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

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


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