המרת איטרטור לרשימה
1. סקירה כללית
במדריך קצר זה, נלמד כיצד להמיר איטרטור אל א רשימה בג'אווה. נסקור כמה דוגמאות באמצעות לולאת זמן, Java 8, וכמה ספריות נפוצות.
נשתמש ב- איטרטור עם מספר שלםs לכל הדוגמאות שלנו:
איטרטור איטרטור = Arrays.asList (1, 2, 3). איטרטור ();
2. שימוש בזמן לולאה
נתחיל בגישה בה נעשה שימוש באופן מסורתי לפני ג'אווה 8. נתחיל להמיר את איטרטור אל א רשימה באמצעותא בזמן לוּלָאָה:
רשימת actualList = ArrayList חדש (); בעוד (iterator.hasNext ()) {actualList.add (iterator.next ()); } assertThat (actualList, containInAnyOrder (1, 2, 3));
3. שימוש ב- Java 8 Iterator.forEachRemaining
ב- Java 8 ואילך, אנו יכולים להשתמש ב- איטרטורשל forEachRemaining () שיטה לבנות שלנו רשימה. נעביר את לְהוֹסִיף() שיטת ה- רשימה ממשק כהפניה לשיטה:
רשימת actualList = ArrayList חדש (); iterator.forEachRemaining (actualList :: add); assertThat (actualList, containInAnyOrder (1, 2, 3));
4. שימוש ב- Java 8 Streams API
לאחר מכן נשתמש ב- Java 8 Streams API כדי להמיר את איטרטור אל א רשימה. על מנת להשתמש ב- זרם ממשק API, אנחנו צריכים ראשית להמיר את איטרטור ל ניתן לנידון. אנו יכולים לעשות זאת באמצעות ביטויי Java 8 Lambda:
Iterable iterable = () -> איטרטור;
עכשיו, אנחנו יכולים להשתמש ב StreamSupport מעמד' זרם() ו לאסוף() שיטות לבנות את רשימה:
רשימה actualList = StreamSupport .stream (iterable.spliterator (), שקר) .collect (Collectors.toList ()); assertThat (actualList, containInAnyOrder (1, 2, 3));
5. שימוש בגויאבה
ה ספריית גויאבה מ- Google מספקת אפשרויות ליצור גם שינוי ובלתי משתנה רשימהס, אז נראה את שתי הגישות.
בואו ניצור תחילה ללא שינוי רשימה באמצעות ImmutableList.copyOf () שיטה:
רשימת actualList = ImmutableList.copyOf (iterator); assertThat (actualList, containInAnyOrder (1, 2, 3));
עכשיו, בואו ניצור שינוי רשימה באמצעות Lists.newArrayList () שיטה:
רשימת actualList = Lists.newArrayList (איטרטור); assertThat (actualList, containInAnyOrder (1, 2, 3));
6. שימוש באפצ'י קומונס
ה ספריית אוספי Apache Commons מספקת אפשרויות לעבוד על רשימה. נשתמש IteratorUtils לבצע את ההמרה:
רשימת actualList = IteratorUtils.toList (iterator); assertThat (actualList, containInAnyOrder (1, 2, 3));
7. מסקנה
במאמר זה סקרנו כמה אפשרויות להמרת איטרטור אל א רשימה. אמנם יש עוד כמה דרכים להשיג זאת, אך סיקרנו כמה אפשרויות נפוצות.
ניתן למצוא את היישום של כל הדוגמאות וקטעי הקוד ב- GitHub.