תוספות API 9 אופציונליות ל- Java

1. סקירה כללית

במאמר זה נבחן את התוספות Java 9 ל- אופציונאלי ממשק API.

מעבר למודולריות, ג'אווה 9 מוסיפה גם שלוש שיטות שימושיות מאוד עבור אופציונאלי מעמד.

2. ה אוֹ() שיטה

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

לפני Java 9 את אופציונאלי בכיתה היו רק את אחרת() ו orElseGet () שיטות אך שניהם צריכים להחזיר ערכים לא עטופים.

ג'אווה 9 מציגה את אוֹ() שיטה שמחזירה אחרת אופציונאלי בעצלתיים אם שלנו אופציונאלי זה ריק. אם הראשון שלנו אופציונאלי יש ערך מוגדר, למבדה הועברה ל אוֹ() השיטה לא תופעל, והערך לא יחושב ויוחזר:

@Test הציבור בטל שניתןOptional_whenPresent_thenShouldTakeAValueFromIt () {// נתון מחרוזת צפוי = "properValue"; ערך אופציונלי = Optional.of (צפוי); Optional defaultValue = Optional.of ("ברירת מחדל"); // כאשר תוצאה אופציונלית = value.or (() -> defaultValue); // ואז assertThat (result.get ()). isEqualTo (צפוי); }

במקרה של אופציונאלי ביינג ריק, הוחזר תוֹצָאָה יהיה זהה ל ערך ברירת מחדל:

@ מבחן חלל ציבורי givenOptional_whenEmpty_thenShouldTakeAValueFromOr () {// given String defaultString = "default"; ערך אופציונלי = Optional.empty (); Optional defaultValue = Optional.of (defaultString); // כאשר תוצאה אופציונלית = value.or (() -> defaultValue); // ואז assertThat (result.get ()). isEqualTo (defaultString); }

3. ה ifPresentOrElse () שיטה

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

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

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

@ מבחן חלל ציבורי givenOptional_whenPresent_thenShouldExecuteProperCallback () {// ניתן ערך אופציונלי = Optional.of ("properValue"); AtomicInteger successCounter = AtomicInteger חדש (0); AtomicInteger onEmptyOptionalCounter = AtomicInteger חדש (0); // כאשר value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // ואז assertThat (successCounter.get ()). isEqualTo (1); assertThat (onEmptyOptionalCounter.get ()). isEqualTo (0); }

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

במקרה של ריק אופציונאלי, השיחה החוזרת השנייה מבוצעת:

@Test public void givenOptional_whenNotPresent_thenShouldExecuteProperCallback () {// given Optional value = Optional.empty (); AtomicInteger successCounter = AtomicInteger חדש (0); AtomicInteger onEmptyOptionalCounter = AtomicInteger חדש (0); // כאשר value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // ואז assertThat (successCounter.get ()). isEqualTo (0); assertThat (onEmptyOptionalCounter.get ()). isEqualTo (1); }

4. ה זרם() שיטה

השיטה האחרונה שמתווספת ל- אופציונאלי בכיתה ב- Java 9, הוא זרם() שיטה.

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

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

@Test הציבור בטל שניתןOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream () {// נתון ערך אופציונלי = Optional.of ("a"); // כאשר List collect = value.stream (). מפה (String :: toUpperCase) .collect (Collectors.toList ()); // ואז assertThat (collect) .hasSameElementsAs (List.of ("A")); }

מצד שני, אם אופציונאלי אינו נוכח, קורא זרם() שיטה עליו תיצור ריק זרם:

@Test הציבור בטל שניתןOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream () {// נתון ערך אופציונלי = Optional.empty (); // כאשר List collect = value.stream () .map (String :: toUpperCase) .collect (Collectors.toList ()); // ואז assertThat (collect) .isEmpty (); }

כעת נוכל לסנן במהירות זרמים שֶׁל אופציות.

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

5. מסקנה

במאמר מהיר זה, הסתכלנו על Java 9 אופציונאלי תוספות API.

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

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

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