שיטת Map.computeIfAbsent ()

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

במדריך זה נבחן בקצרה את שיטת ברירת המחדל החדשה computeIfAbsent של ה מַפָּה ממשק שהוצג ב- Java 8.

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

2. Map.computeIfAbsent שיטה

נתחיל בהסתכלות על החתימה של computeIfAbsent:

ברירת מחדל V computeIfAbsent (מקש K, פונקציית מיפוי פונקציה)

ה computeIfAbsent השיטה לוקחת שני פרמטרים. הפרמטר הראשון הוא ה- מַפְתֵחַ והפרמטר השני הוא ה- mappingFunction. חשוב לדעת כי פונקציית המיפוי נקראת רק אם המיפוי אינו קיים.

2.1. מפתח שקשור לערך שאינו אפס

ראשית, הוא בודק אם ה- מַפְתֵחַ נמצא במפה. אם ה מַפְתֵחַ קיים וערך שאינו null קשור למפתח ואז הוא מחזיר את הערך:

Map stringLength = HashMap חדש (); stringLength.put ("ג'ון", 5); assertEquals ((long) stringLength.computeIfAbsent ("John", s -> s.length ()), 5);

כפי שאנו רואים, מפתח "ג'ון" יש מיפוי שאינו ריק, הוא מחזיר את הערך 5. אם היו משתמשים בפונקציית המיפוי שלנו, היינו מצפים שהפונקציה תחזיר את האורך של 4.

2.2. שימוש בפונקציית המיפוי לחישוב הערך

יתר על כן, אם מַפְתֵחַ אינו קיים במפה או ערך null קשור ל- מַפְתֵחַ, ואז הוא מנסה לחשב את הערך באמצעות הנתון mappingFunction. כמו כן, הוא מזין את הערך המחושב למפה אלא אם כן הערך המחושב הוא אפס.

בואו נסתכל על השימוש ב- mappingFunction בתוך ה computeIfAbsent שיטה:

Map stringLength = HashMap חדש (); assertEquals ((long) stringLength.computeIfAbsent ("John", s -> s.length ()), 4); assertEquals ((long) stringLength.get ("John"), 4);

מאז מפתח "ג'ון" אינו קיים, הוא מחשב את הערך על ידי העברת ה- מַפְתֵחַ כפרמטר ל- mappingFunction.

2.3. פונקציית מיפוי חוזרת ריק

כמו כן, אם mappingFunction החזרות ריק, המפה לא מתעדת מיפוי:

Map stringLength = HashMap חדש (); assertEquals (stringLength.computeIfAbsent ("John", s -> null), null); assertNull (stringLength.get ("ג'ון"));

2.4. פונקציית מיפוי משליכה חריג

לבסוף, אם mappingFunction זורק חריג לא מסומן ואז החריג מושלך מחדש והמפה לא מתעדת מיפוי:

@Test (צפוי = RuntimeException.class) בטל ציבורי כאשרMappingFunctionThrowsException_thenExceptionIsRethrown () {Map stringLength = חדש HashMap (); stringLength.computeIfAbsent ("John", s -> {throw new RuntimeException ();}); }

אנו רואים כי mappingFunction זורק א חריגת זמן ריצה, שמתפשט חזרה ל computeIfAbsent שיטה.

3. מסקנה

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

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


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