將迭代器轉換為列表

1.概述

在這個簡短的教程中,我們將學習如何在Java中將Iterator轉換為List 。我們將使用while循環,Java 8和一些通用庫介紹一些示例。

對於所有示例,我們將使用帶有IntegerIterator

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

2.使用While循環

讓我們從Java 8之前傳統上使用的方法開始。我們將使用**while循環**Iterator轉換為List

List<Integer> actualList = new ArrayList<Integer>();

 while (iterator.hasNext()) {

 actualList.add(iterator.next());

 }



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

3.使用Java 8 Iterator.forEachRemaining

在Java 8和更高版本中,我們可以使用IteratorforEachRemaining()方法來構建List 。我們將傳遞List接口的add()方法作為方法參考:

List<Integer> actualList = new ArrayList<Integer>();

 iterator.forEachRemaining(actualList::add);



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

4.使用Java 8 Streams API

接下來,我們將使用Java 8 Streams API將Iterator轉換為List 。為了使用Stream API,我們需要首先將Iterator轉換為Iterable 。我們可以使用Java 8 Lambda表達式來做到這一點:

Iterable<Integer> iterable = () -> iterator;

現在,我們可以使用StreamSupport類的stream()collect()方法來構建List

List<Integer> actualList = StreamSupport

 .stream(iterable.spliterator(), false)

 .collect(Collectors.toList());



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

5.使用番石榴

GoogleGuava庫**提供了創建可變和不可變List的選項,**因此我們將介紹這兩種方法。

首先,使用ImmutableList.copyOf()方法創建一個不可變List

List<Integer> actualList = ImmutableList.copyOf(iterator);



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

現在,讓我們使用Lists.newArrayList()方法創建一個可變List

List<Integer> actualList = Lists.newArrayList(iterator);



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

6.使用Apache Commons

**Apache Commons Collections庫提供了用於List.選項List.**我們將使用IteratorUtils進行轉換:

List<Integer> actualList = IteratorUtils.toList(iterator);



 assertThat(actualList, containsInAnyOrder(1, 2, 3));

7.結論

在本文中,我們介紹了一些將Iterator轉換為List選項。儘管還有其他幾種方法可以實現此目的,但我們介紹了幾種常用的選項。

所有這些示例和代碼段的實現都可以在GitHub上找到