המרת איטרטור לרשימה

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.