שימוש בזוגות בג'אווה

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

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

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

2. יישום ליבה של Java

2.1. ה זוג מעמד

ה זוג ניתן למצוא את הכיתה ב javafx.util חֲבִילָה. הבנאי של הכיתה הזו לוקח שני ארגומנטים, מפתח וערכו המקביל:

זוג זוג = זוג חדש (1, "אחד"); מפתח שלם = pair.getKey (); ערך מחרוזת = pair.getValue (); 

דוגמה זו ממחישה פשוט מספר שלם ל חוּט מיפוי באמצעות המושג Pair.

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

2.2. AbstractMap.SimpleEntry ו AbstractMap.SimpleImmutableEntry

SimpleEntry מוגדר כמעמד מקונן בתוך AbstractMap מעמד. כדי ליצור אובייקט מסוג זה אנו יכולים לספק מפתח וערך לבנאי:

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry (1, "one"); מפתח שלם = entry.getKey (); ערך מחרוזת = entry.getValue ();

ניתן לגשת למפתח ולערך באמצעות שיטות גטר וסתר סטנדרטיות.

בנוסף, ה- AbstractMap המחלקה מכילה גם מחלקה מקוננת המייצגת זוג בלתי משתנה: ה- SimpleImmutableEntry מעמד:

AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry (1, "one");

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

3. אפאצ'י קומונס

בספריית Apache Commons נוכל למצוא את ה- זוג בכיתה ב org.apache.commons.lang3.tuple חֲבִילָה. זהו מעמד מופשט, ולכן אי אפשר לייצר אותו באופן מיידי.

אנו יכולים למצוא כאן, שתי מחלקות משנה - המייצגות זוגות בלתי ניתנים לשינוי וניתנים לשינוי: ImmutablePair ו MutablePair.

לשתי היישומים יש גישה לשיטות מפתח / ערך getter / setter:

זוג ImmutablePair = חדש ImmutablePair (2, "שניים"); מפתח שלם = pair.getKey (); ערך מחרוזת = pair.getValue ();

באופן לא מפתיע, ניסיון להפעיל הגדר ערך() על ImmutablePair מביא ל- לא נתמךOperationException.

אך הפעולה תקפה לחלוטין ליישום משתנה:

זוג זוג = MutablePair חדש (3, "שלוש"); pair.setValue ("שלוש חדשות"); 

4. Vavr

בספריית Vavr, פונקציונליות הזוגית ניתנת על ידי הבלתי משתנה Tuple2 מעמד:

זוג Tuple2 = Tuple2 חדש (4, "ארבעה"); מפתח שלם = זוג ._1 (); ערך מחרוזת = pair._2 (); 

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

tuplePair = pair.update2 ("ארבעה חדשים"); 

5. חלופה I - מחלקת מיכלים פשוטה

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

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

מחלקה ציבורית CustomPair {מפתח מחרוזת פרטי; ערך מחרוזת פרטי; // סטרים וקובעים סטנדרטיים}

6. אלטרנטיבה II - מערכים

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

אובייקט פרטי [] getPair () {// ... להחזיר אובייקט חדש [] {מפתח, ערך}; }

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

7. מסקנה

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

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