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.