Java中將迭代器轉變爲流

1.概述

在這個簡短的教程中,讓我們將Java Iterable對象轉換為Stream並對其執行一些標準操作。

2.將Iterable轉換為Stream

Iterable接口在設計時牢記通用性,並且不自行提供任何stream()方法。

簡而言之,您可以將其傳遞給StreamSupport.stream()方法,並從給定的Iterable實例獲取Stream

讓我們考慮一下Iterable實例:

Iterable<String> iterable

 = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

這是我們如何將此Iterable實例轉換為Stream:

StreamSupport.stream(iterable.spliterator(), false);

請注意, StreamSupport.stream()中的第二個參數確定生成的Stream應該是並行還是順序。對於並行Stream ,應將其設置為true。

現在讓我們測試一下實現:

@Test

 public void givenIterable_whenConvertedToStream_thenNotNull() {

 Iterable<String> iterable

 = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");



 Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false));

 }

還有一個簡短的說明-流不可重用,而Iterable是可重用;它還提供了spliterator()方法,該方法在給定Iterable描述的元素上返回一個java.lang.Spliterator instance

3.執行Stream操作

讓我們執行一個簡單的流操作:

@Test

 public void whenConvertedToList_thenCorrect() {

 Iterable<String> iterable

 = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");



 List<String> result = StreamSupport.stream(iterable.spliterator(), false)

 .map(String::toUpperCase)

 .collect(Collectors.toList());



 assertThat(

 result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM"));

 }

4。結論

這個簡單的教程展示瞭如何將Iterable實例轉換為Stream實例並對其執行標準操作,就像對任何其他Collection實例所做的一樣。

所有代碼片段的實現都可以在Github項目中找到。