כיצד להחזיר מספר ערכים משיטת Java

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

במדריך זה נלמד דרכים שונות להחזרת ערכים מרובים משיטת Java.

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

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

2. שימוש במערכים

ניתן להשתמש במערכים להחזרת סוגי נתונים פרימיטיביים וסוגי הפניה.

לדוגמא, הדברים הבאים getCoordinates השיטה מחזירה מערך של שניים לְהַכפִּיל ערכים:

כפול [] getCoordinatesDoubleArray () {כפול [] קואורדינטות = כפול חדש [2]; קואורדינטות [0] = 10; קואורדינטות [1] = 12.5; קואורדינטות החזרה; }

אם ברצוננו להחזיר מערך מסוגי ייחוס שונים, נוכל להשתמש בסוג אב משותף כסוג המערך:

מספר [] getCoordinatesNumberArray () {מספר [] קואורדינטות = מספר חדש [2]; קואורדינטות [0] = 10; // קואורדינטות שלמות [1] = 12.5; // קואורדינטות החזרה כפולות; }

כאן הגדרנו את קואורדינטות מערך סוג מספר כי זה המעמד הנפוץ בין מספר שלם ו לְהַכפִּיל אלמנטים.

3. שימוש באוספים

עם אוספי Java גנריים, אנו יכולים להחזיר מספר ערכים מסוג שכיח.

למסגרת האוספים קשת רחבה של שיעורים וממשקים. עם זאת, בחלק זה, נגביל את הדיון שלנו ל רשימה ו מַפָּה ממשקים.

3.1. החזרת ערכים מסוג דומה ברשימה

ראשית, בוא ונכתוב מחדש את דוגמת המערך הקודמת באמצעות רשימה:

רשימת getCoordinatesList () {רשימת קואורדינטות = ArrayList חדש (); קואורדינטות. להוסיף (10); // קואורדינטות שלמות. להוסיף (12.5); // קואורדינטות החזרה כפולות; }

כמו מספר[], ה רשימה אוסף מכיל רצף של אלמנטים מעורבים כולם מאותו סוג נפוץ.

3.2. החזרת ערכים בעלי שם במפה

אם ברצוננו למנות כל ערך באוסף שלנו, א מַפָּה ניתן להשתמש במקום:

מפה getCoordinatesMap () {Map coordinates = חדש HashMap (); coordinates.put ("קו אורך", 10); coordinates.put ("קו רוחב", 12.5); קואורדינטות החזרה; }

משתמשים ב- getCoordinatesMap השיטה יכולה להשתמש ב"קו אורך ” או “קו רוחב" מקשים עם מפה # קבל שיטה לאחזור הערך המתאים.

4. שימוש בכיתות מיכל

שלא כמו מערכים ואוספים, מחלקות מיכל (POJO) יכולות לעטוף שדות מרובים עם סוגי נתונים שונים.

למשל, הדברים הבאים קואורדינטות למחלקה שני סוגי נתונים שונים, לְהַכפִּיל ו חוּט:

קואורדינטות בכיתה ציבורית {קו אורך כפול פרטי; קו רוחב כפול פרטי; פרטי מחרוזת placeName; קואורדינטות ציבוריות (קו אורך כפול, קו רוחב כפול, מיקום מחרוזת) {this.longitude = קו אורך; this.latitude = קו רוחב; this.placeName = מקום שם; } // גטרים וקובעים}

שימוש בכיתות מיכל כמו קואורדינטות מאפשר לנו לדגם סוגי נתונים מורכבים עם שמות משמעותיים.

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

קואורדינטות getCoordinates () {אורך כפול = 10; קו רוחב כפול = 12.5; מחרוזת placeName = "בית"; להחזיר קואורדינטות חדשות (קו אורך, קו רוחב, מקום שם); }

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

5. שימוש בטיפלס

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

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

כפולה יכולה להיות מכל מספר שדות והיא נקראת לעתים קרובות טופלn, כאשר n הוא מספר השדות. לדוגמא, Tuple2 הוא tuple דו-שדה, Tuple3 הוא tuple תלת-שדה וכן הלאה.

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

בואו ניצור תחילה טופל של שני שדות כללי:

מחלקה ציבורית Tuple2 {K פרטי ראשון; שנייה פרטית V; ציבורי Tuple2 (K ראשון, V שני) {this.first = ראשון; this.second = שנייה; } // גטרים וקובעים}

לאחר מכן, בואו נשתמש בהיגיון שלנו ונשתמש ב- Tuple2 למשל לעטוף את התוצאות:

Tuple2 getMostDistantPoint (רשימת קואורדינטות רשימה, קואורדינטות יעד) {החזר קואורדינטות רשימה.סטרים () .מפה (coor -> Tuple2 חדש (coor, coor.calculateDistance (יעד))). מקס ((d1, d2) -> השוואה כפולה (d1 .getSecond (), d2.getSecond ())) // השווה מרחקים .get (); }

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

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

6. ספריות צד שלישי

כמה ספריות של צד שלישי יישמו שינויים בלתי ניתנים לשינוי זוג אוֹ לְשַׁלֵשׁ סוּג. Apache Commons Lang ו- javatuples הם דוגמאות מעולות. ברגע שיש לנו ספריות אלה כתלות ביישום שלנו, אנו יכולים להשתמש ישירות ב- זוג אוֹ לְשַׁלֵשׁ סוגים הניתנים על ידי הספריות במקום ליצור אותם בעצמנו.

בואו נסתכל על דוגמא באמצעות אפאצ'י קומונס לאנג להחזרת a זוג או א לְשַׁלֵשׁ לְהִתְנַגֵד.

לפני שנמשיך הלאה, בואו נוסיף את ה- commons-lang3 תלות שלנו pom.xml:

 org.apache.commons commons-lang3 3.9 

6.1. ImmutablePair מאפצ'י קומונס לאנג

ה ImmutablePair סוג מתוך אפאצ'י קומונס לאנג הוא בדיוק מה שאנחנו רוצים: טיפוס בלתי משתנה שהשימוש בו פשוט.

הוא מכיל שני שדות: שמאלה ו ימין. בואו נראה איך להכין את שלנו getMostDistantPoint שיטה להחזיר אובייקט של ImmutablePair סוּג:

ImmutablePair getMostDistantPoint (רשימת קואורדינטות רשימה, יעד קואורדינטות) {החזר קואורדינטות ליסט.זרם () .מפה (קואורדינטות -> ImmutablePair.of (קואורדינטות, קואורדינטות. מחשבון מרחק (יעד))). מקס (Comparator.comparingDouble (זוג :: getRight)). לקבל(); }

6.2. ImmutableTriple מאפצ'י קומונס לאנג

ה ImmutableTriple די דומה ל ImmutablePair. ההבדל היחיד הוא, כשמו כן הוא, ImmutableTriple מכיל שלושה שדות: שמאלה, אֶמצַע, ו ימין.

כעת, בואו להוסיף שיטה חדשה לחישוב הקואורדינטות שלנו כדי להראות כיצד להשתמש ב- ImmutableTriple סוּג.

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

בואו נראה איך נוכל להחזיר את שלושת הערכים בשיטה אחת באמצעות ה- ImmutableTriple מעמד:

ImmutableTriple getMinAvgMaxTriple (רשימת קואורדינטות רשימה, יעד קואורדינטות) {רשימת מרחק מרחק = קואורדינטות רשימה.סטראם () .מפה (קואורדינטות -> קואורדינטות.מחשבון מרחק (יעד)) .collect (Collectors.toList ()); MinDistance כפול = distanceList.stream (). MapToDouble (Double :: doubleValue) .min (). GetAsDouble (); AvgDistance כפול = distanceList.stream (). MapToDouble (Double :: doubleValue) .average (). OrElse (0.0D); MaxDistance כפול = distanceList.stream (). MapToDouble (Double :: doubleValue) .max (). GetAsDouble (); החזר ImmutableTriple.of (minDistance, avgDistance, maxDistance); }

7. מסקנה

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

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

למדנו גם שכמה ספריות צד שלישי יישמו סוגים זוגיים ומשולשים וראינו כמה דוגמאות מספריית Apache Commons Lang.

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


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