Преобразуване на Iterator в Списък

1. Общ преглед

В този кратък урок ще научим как да конвертирате итератор в списък в Java. Ще разгледаме няколко примера с помощта на цикъл while, Java 8 и няколко общи библиотеки.

За всички наши примери ще използваме итератор с Integer s:

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

2. Използване на цикъла while

Да започнем с подхода, който традиционно се използва преди Java 8. Ние ще конвертирате итератор към списъка с помощта на време цикъл :

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

3. Използване на Java 8 Iterator.forEachRemaining

В Java 8 и по-нови версии можем да използваме метода forEachRemaining () на Iterator, за да изградим нашия Списък . Ще предадем метода add () на интерфейса List като референтен метод:

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

4. Използване на API 8 Streams API

След това ще използваме Java 8 Streams API, за да преобразуваме итератора в списък . За да използваме Stream API, първо трябва да конвертираме Iterator в Iterable . Можем да направим това с помощта на Java 8 Lambda изрази:

Iterable iterable = () -> iterator; 

Сега можем да използваме методите StreamSupport ' stream () и collect () за изграждане на Списък :

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

5. Използване на Гуава

В Guava библиотеката от Google предоставя възможности за създаване на двете непостоянен и неизменни Списък ите , така че ще видим и двата подхода.

Нека първо създадем неизменим списък, използвайки метода ImmutableList.copyOf () :

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

Сега, нека създадем променлив списък, използвайки метода Lists.newArrayList () :

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

6. Използване на Apache Commons

В библиотеката Apache Commons Collections предлага опции за работа по списъка. Ще използваме IteratorUtils, за да направим преобразуването:

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

7. Заключение

В тази статия разгледахме няколко опции за конвертиране на итератор в списък . Въпреки че има няколко други начина за постигане на това, ние разгледахме няколко често използвани опции.

Прилагането на всички тези примери и кодови фрагменти може да бъде намерено в GitHub.