גויאבה - מפות
1. סקירה כללית
במדריך זה נמחיש את הדרכים השימושיות ביותר שתוכלו לעשות למנף את גויאבה לעבודה עם ג'אווה מפות.
נתחיל פשוט מאוד ליצור מפת גיבובבלי ה חָדָשׁ מפעיל, באמצעות גויאבה:
מפה aNewMap = Maps.newHashMap ();
2. ImmutableMap
הבא - בואו נראה איך ליצור ImmutableMap באמצעות גויאבה:
@ מבחן ציבורי בטל whenCreatingImmutableMap_thenCorrect () {משכורת מפה = ImmutableMap. builder () .put ("John", 1000) .put ("Jane", 1500) .put ("אדם", 2000) .put ("טום", 2000) .build (); assertEquals (1000, salary.get ("John"). intValue ()); assertEquals (2000, salary.get ("טום"). intValue ()); }
3. SortedMap
עכשיו - בואו נסתכל על יצירת ועבודה עם a SortedMap.
בדוגמה הבאה - אנו יוצרים מפה ממוינת באמצעות בונה הגויאבה המתאים:
@ מבחן פומבי בטל כאשר UsSingedMap_thenKeysAreSorted () {ImmutableSortedMap משכורת = חדש ImmutableSortedMap. Builder (Ordering.natural ()) .put ("John", 1000) .put ("Jane", 1500) .put ("Adam", 2000). put ("טום", 2000) .build (); assertEquals ("אדם", משכורת.פירסטקיי ()); assertEquals (2000, salary.lastEntry (). getValue (). intValue ()); }
4. BiMap
לאחר מכן - בואו נדון כיצד להשתמש BiMap. אנחנו יכולים להשתמש BiMap למפות מקשים בחזרה לערכים מכיוון שהיא מוודאת שהערכים ייחודיים.
בדוגמה הבאה - אנו יוצרים a BiMap וכי אנחנו מקבלים את זה הפוך():
@ מבחן ציבורי בטל כאשרCreateBiMap_thenCreated () {מילות BiMap = HashBiMap.create (); words.put ("ראשית", 1); words.put ("שני", 2); words.put ("שלישי", 3); assertEquals (2, words.get ("Second"). intValue ()); assertEquals ("שלישי", מילים.הפוך (). קבל (3)); }
5. מולטימפה
עכשיו - בואו נסתכל על מולטימפה.
אנחנו יכולים להשתמש מולטימפה ל לשייך כל מפתח לערכים מרובים כמו בדוגמה הבאה:
@ מבחן ציבורי בטל כאשרCreateMultimap_thenCreated () {Multimap multimap = ArrayListMultimap.create (); multimap.put ("פרי", "תפוח"); multimap.put ("פרי", "בננה"); multimap.put ("חיית מחמד", "חתול"); multimap.put ("חיית מחמד", "כלב"); assertThat (multimap.get ("פרי"), מכיל InAnyOrder ("תפוח", "בננה")); assertThat (multimap.get ("חיית מחמד"), containInAnyOrder ("חתול", "כלב")); }
5. שולחן
בואו נסתכל עכשיו על הגויאבה שולחן; אנו משתמשים שולחן אם אנחנו צריכים יותר ממפתח אחד לאינדקס של ערך.
בדוגמה הבאה - נשתמש בטבלה לאחסון המרחקים בין ערים:
@Test הציבור בטל כאשרCreatingTable_thenCorrect () {מרחק טבלה = HashBasedTable.create (); distance.put ("לונדון", "פריז", 340); distance.put ("ניו יורק", "לוס אנג'לס", 3940); distance.put ("לונדון", "ניו יורק", 5576); assertEquals (3940, distance.get ("ניו יורק", "לוס אנג'לס"). intValue ()); assertThat (distance.columnKeySet (), containInAnyOrder ("פריז", "ניו יורק", "לוס אנג'לס")); assertThat (distance.rowKeySet (), containInAnyOrder ("לונדון", "ניו יורק")); }
אנחנו יכולים גם להשתמש Tables.transpose () להפוך את מקשי השורות והעמודות כמו בדוגמה הבאה:
@ מבחן ציבורי בטל כאשרTransposingTable_thenCorrect () {מרחק טבלה = HashBasedTable.create (); distance.put ("לונדון", "פריז", 340); distance.put ("ניו יורק", "לוס אנג'לס", 3940); distance.put ("לונדון", "ניו יורק", 5576); טבלה מועברת = Tables.transpos (מרחק); assertThat (transposed.rowKeySet (), containInAnyOrder ("פריז", "ניו יורק", "לוס אנג'לס")); assertThat (transposed.columnKeySet (), containInAnyOrder ("לונדון", "ניו יורק")); }
6. ClassToInstanceMap
הבא - בואו נסתכל על ClassToInstanceMap. אנחנו יכולים להשתמש ClassToInstanceMap אם אנו רוצים שהמחלקה של האובייקט תהיה המפתח כמו בדוגמה הבאה:
@Test הציבור בטל כאשרCreatingClassToInstanceMap_thenCorrect () {ClassToInstanceMap numbers = MutableClassToInstanceMap.create (); numbers.putInstance (Integer.class, 1); numbers.putInstance (Double.class, 1.5); assertEquals (1, numbers.get (Integer.class)); assertEquals (1.5, numbers.get (Double.class)); }
7. קבוצה רשימה באמצעות מולטימפה
הבא - בואו נראה איך לקבץ א רשימה באמצעות מולטימפה. בדוגמה הבאה - אנו מקבצים א רשימה שמות לפי אורכם באמצעות Multimaps.index ():
@ מבחן ציבורי בטל כאשר GroupingListsUsingMultimap_thenGrouped () {List names = Lists.newArrayList ("John", "Adam", "Tom"); פונקציה func = פונקציה חדשה () {שלם ציבורי החל (קלט מחרוזת) {return input.length (); }}; קבוצות מולטימפים = Multimaps.index (שמות, פונקציות); assertThat (group.get (3), containInAnyOrder ("טום")); assertThat (group.get (4), containInAnyOrder ("ג'ון", "אדם")); }
8. מסקנה
במדריך מהיר זה דנו במקרי השימוש הנפוצים והשימושיים ביותר של עבודה עם מפות באמצעות ספריית גויאבה.
יישום כל הדוגמאות וקטעי הקוד ניתן למצוא בפרויקט GitHub של גויאבה שלי - זהו פרויקט מבוסס ליקוי חמה, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.