Konvertering af Iterator til liste

1. Oversigt

I denne korte vejledning lærer vi, hvordan man konverterer en Iterator til en Liste i Java. Vi dækker et par eksempler ved hjælp af en while-loop, Java 8 og et par almindelige biblioteker.

Vi bruger en Iterator med Heltals til alle vores eksempler:

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

2. Brug af While Loop

Lad os begynde med den tilgang, der traditionelt blev brugt før Java 8. Vi gør det konvertere Iterator til en Liste ved brug af-en mens løkke:

Liste actualList = ny ArrayList (); mens (iterator.hasNext ()) {actualList.add (iterator.next ()); } assertThat (actualList, containInAnyOrder (1, 2, 3)); 

3. Brug af Java 8 Iterator.forEachRemaining

I Java 8 og nyere kan vi bruge Iterator'S forEachRemaining () metode til at opbygge vores Liste. Vi passerer tilføje() metode til Liste interface som metodehenvisning:

Liste actualList = ny ArrayList (); iterator.forEachRemaining (actualList :: add); assertThat (actualList, containInAnyOrder (1, 2, 3)); 

4. Brug af Java 8 Streams API

Dernæst bruger vi Java 8 Streams API til at konvertere Iterator til en Liste. For at bruge Strøm API, vi skal først konvertere Iterator til en Iterabel. Vi kan gøre dette ved hjælp af Java 8 Lambda-udtryk:

Iterabel iterabel = () -> iterator; 

Nu kan vi brug StreamSupport klasse ' strøm() og indsamle() metoder til at opbygge Liste:

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

5. Brug af Guava

Det Guava bibliotek fra Google giver muligheder for at skabe både en ændring og uforanderlig Listes, så vi ser begge tilgange.

Lad os først oprette en uforanderlig Liste ved brug af ImmutableList.copyOf () metode:

Liste actualList = ImmutableList.copyOf (iterator); assertThat (actualList, containInAnyOrder (1, 2, 3));

Lad os nu oprette en mutabel Liste ved brug af Lists.newArrayList () metode:

Liste actualList = Lists.newArrayList (iterator); assertThat (actualList, containInAnyOrder (1, 2, 3));

6. Brug af Apache Commons

Det Apache Commons Collections-biblioteket giver muligheder for at arbejde på en Liste. Vi bruger IteratorUtils at gøre konverteringen:

Liste actualList = IteratorUtils.toList (iterator); assertThat (actualList, containInAnyOrder (1, 2, 3));

7. Konklusion

I denne artikel har vi dækket et par muligheder for at konvertere en Iterator til en Liste. Mens der er et par andre måder at opnå dette på, har vi dækket flere almindeligt anvendte muligheder.

Implementeringen af ​​alle disse eksempler og kodestykker findes på GitHub.