將迭代器轉換為列表
1.概述
在這個簡短的教程中,我們將學習如何在Java中將Iterator
轉換為List
。我們將使用while循環,Java 8和一些通用庫介紹一些示例。
對於所有示例,我們將使用帶有Integer
的Iterator
:
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和更高版本中,我們可以使用Iterator
的forEachRemaining()
方法來構建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.使用番石榴
Google的Guava庫**提供了創建可變和不可變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上找到。
0 條評論,你可以發表評論,我們會進行改進
