Pretvaranje Iteratora u popis

1. Pregled

U ovom kratkom vodiču naučit ćemo kako pretvoriti Iterator do a Popis na Javi. Obuhvatit ćemo nekoliko primjera pomoću while petlje, Java 8 i nekoliko uobičajenih knjižnica.

Upotrijebit ćemo Iterator s Cijeli brojs za sve naše primjere:

Iterator iterator = Arrays.asList (1, 2, 3) .iterator (); 

2. Korištenje while petlje

Počnimo s pristupom koji se tradicionalno koristio prije Jave 8. Mi ćemo pretvoriti Iterator do a Popis koristećia dok petlja:

Popis actualList = novi ArrayList (); while (iterator.hasNext ()) {actualList.add (iterator.next ()); } assertThat (actualList, containsInAnyOrder (1, 2, 3)); 

3. Korištenje Jave 8 Iterator.forEachRemaining

U Javi 8 i novijim verzijama možemo koristiti Iterator‘S forEachRemaining () metoda za izgradnju našeg Popis. Proći ćemo dodati() metoda Popis sučelje kao referenca metode:

Popis actualList = novi ArrayList (); iterator.forEachRemaining (actualList :: add); assertThat (actualList, containsInAnyOrder (1, 2, 3)); 

4. Korištenje Java 8 Streams API-ja

Dalje ćemo koristiti Java 8 Streams API za pretvorbu Iterator do a Popis. Da biste koristili Stream API, moramo prvo pretvoriti Iterator do an Iterativ. To možemo učiniti pomoću izraza Java 8 Lambda:

Iterable iterable = () -> iterator; 

Sad možemo koristiti StreamSupport razred ' stream () i prikupiti() metode za izgradnju Popis:

Popis actualList = StreamSupport .stream (iterable.spliterator (), false) .collect (Collectors.toList ()); assertThat (actualList, containsInAnyOrder (1, 2, 3));

5. Korištenje Guave

The Knjižnica Guava od Googlea nudi mogućnosti za stvaranje promjenjivog i nepromjenjivog Popiss, pa ćemo vidjeti oba pristupa.

Stvorimo prvo nepromjenjivu Popis koristeći ImmutableList.copyOf () metoda:

Popis actualList = ImmutableList.copyOf (iterator); assertThat (actualList, containsInAnyOrder (1, 2, 3));

Ajmo sada stvoriti promjenjivi Popis koristeći Lists.newArrayList () metoda:

Popis actualList = Lists.newArrayList (iterator); assertThat (actualList, containsInAnyOrder (1, 2, 3));

6. Korištenje Apache Commons

The Biblioteka Apache Commons Collections nudi mogućnosti rada na a Popis. Koristit ćemo IteratorUtils za pretvorbu:

Popis actualList = IteratorUtils.toList (iterator); assertThat (actualList, containsInAnyOrder (1, 2, 3));

7. Zaključak

U ovom smo članku pokrili nekoliko mogućnosti za pretvaranje Iterator do a Popis. Iako postoji nekoliko drugih načina da se to postigne, pokrili smo nekoliko najčešće korištenih opcija.

Provedbu svih ovih primjera i isječaka koda možete pronaći na GitHubu.