צומת שתי רשימות בג'אווה

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

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

כמו הרבה דברים אחרים, זה הפך להיות הרבה יותר קל בזכות הצגת זרמים ב- Java 8.

2. צומת שתי רשימות מיתרים

בואו ניצור שניים רשימהכך F חוּטעם צומת כלשהו - שניהם כוללים כמה אלמנטים משוכפלים:

רשימת רשימה = Arrays.asList ("אדום", "כחול", "כחול", "ירוק", "אדום"); רשימת otherList = Arrays.asList ("אדום", "ירוק", "ירוק", "צהוב");

ועכשיו נקבע את צומת הרשימות בעזרת שיטות הזרמה:

הגדר תוצאה = list.stream () .distinct () .filter (otherList :: מכיל) .collect (Collectors.toSet ()); הגדר commonElements = HashSet חדש (Arrays.asList ("אדום", "ירוק")); Assert.assertEquals (CommonElements, תוצאה);

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

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

לפרטים נוספים, עיין במדריך שלנו לאספני Java 8.

3. צומת רשימות של שיעורים מותאמים אישית

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

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

למשל, שני מלבנים שווים אם רוחבם וגובהם זהים.

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

למידע נוסף אודות שווים שיטה, עיין במאמר שלנו על Java שווים() ו hashCode () חוזים.

4. מסקנה

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

דוגמאות לקודים זמינות ב- GitHub.


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