Java8中創(chuàng)建Stream流的幾種常見方式
在Java 8中,??Stream?? API 是一種新的處理數(shù)據(jù)的方式,它允許以聲明式的方式來處理數(shù)據(jù)集合。??Stream?? 可以讓你以一種非常自然且高效的方式來表達(dá)對數(shù)據(jù)集合的復(fù)雜操作。本文將詳細(xì)介紹在Java 8中創(chuàng)建 ??Stream?? 流的幾種常見方式。
1. 通過Collection系列集合創(chuàng)建
??Collection?? 接口在Java 8中新增了一個 ??stream()?? 方法和一個 ??parallelStream()?? 方法,可以用來生成相應(yīng)的 ??Stream?? 對象。
示例代碼
import java.util.ArrayList; import java.util.List; public class CollectionToStream { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 創(chuàng)建順序流 Stream<String> stream = list.stream(); // 創(chuàng)建并行流 Stream<String> parallelStream = list.parallelStream(); } }
2. 通過Arrays中的靜態(tài)方法asList()創(chuàng)建
??Arrays?? 類提供了一個 ??asList()?? 方法,可以將數(shù)組轉(zhuǎn)換成列表,然后調(diào)用列表的 ??stream()?? 方法來創(chuàng)建 ??Stream??。
示例代碼
import java.util.Arrays; import java.util.stream.Stream; public class ArrayToStream { public static void main(String[] args) { String[] array = {"Apple", "Banana", "Cherry"}; // 使用Arrays.asList()轉(zhuǎn)換成列表后創(chuàng)建Stream Stream<String> stream = Arrays.asList(array).stream(); } }
3. 通過Stream類中的靜態(tài)方法of()
??Stream?? 類提供了一個 ??of()?? 方法,可以直接接受不定數(shù)量的參數(shù),生成包含這些值的 ??Stream??。
示例代碼
import java.util.stream.Stream; public class StreamOf { public static void main(String[] args) { Stream<String> stream = Stream.of("Apple", "Banana", "Cherry"); } }
4. 通過BufferedReader的lines()方法創(chuàng)建
??BufferedReader?? 類提供了一個 ??lines()?? 方法,可以讀取文件中的每一行文本,并返回一個 ??Stream??,其中每個元素都是文件中的一行。
示例代碼
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.stream.Stream; public class BufferedReaderToStream { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("path/to/file.txt"))) { Stream<String> lines = reader.lines(); } catch (IOException e) { e.printStackTrace(); } } }
5. 通過Stream.iterate()或Stream.generate()創(chuàng)建無限流
??Stream?? 還提供了 ??iterate()?? 和 ??generate()?? 方法來創(chuàng)建無限流。這兩個方法都可以接收一個 Supplier 函數(shù)接口作為參數(shù),用于生成流中的元素。
??iterate(T seed, UnaryOperator<T> f)??:從種子值開始,根據(jù)函數(shù)生成后續(xù)元素。
??generate(Supplier<T> s)??:根據(jù)提供的 Supplier 生成流中的元素。
示例代碼
import java.util.stream.Stream; public class InfiniteStream { public static void main(String[] args) { // 無限流 - iterate Stream<Integer> iterate = Stream.iterate(0, n -> n + 2); iterate.limit(10).forEach(System.out::println); // 輸出前10個偶數(shù) // 無限流 - generate Stream<Double> generate = Stream.generate(Math::random); generate.limit(5).forEach(System.out::println); // 輸出5個隨機(jī)數(shù) } }
以上就是在Java 8中創(chuàng)建 ??Stream??? 的幾種主要方式。每種方式都有其適用的場景,了解這些創(chuàng)建方式有助于我們在實際開發(fā)中更加靈活地使用 ??Stream?? API。
6.方法補(bǔ)充
在Java 8中,??Stream??? API 提供了一種高效且易于使用的處理數(shù)據(jù)集合的方式。以下是幾種常見的創(chuàng)建 ??Stream?? 的方法,并附上相應(yīng)的示例代碼:
1. 通過集合創(chuàng)建 Stream
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class CollectionToStream { public static void main(String[] args) { List<String> list = Arrays.asList("Apple", "Banana", "Cherry"); // 通過集合的 stream() 方法創(chuàng)建 Stream Stream<String> stream = list.stream(); // 打印 Stream 中的元素 stream.forEach(System.out::println); } }
2. 通過數(shù)組創(chuàng)建 Stream
import java.util.Arrays; import java.util.stream.Stream; public class ArrayToStream { public static void main(String[] args) { String[] array = {"Apple", "Banana", "Cherry"}; // 通過 Arrays.stream() 方法創(chuàng)建 Stream Stream<String> stream = Arrays.stream(array); // 打印 Stream 中的元素 stream.forEach(System.out::println); } }
3. 通過 Stream.of() 創(chuàng)建 Stream
import java.util.stream.Stream; public class StreamOf { public static void main(String[] args) { // 通過 Stream.of() 方法創(chuàng)建 Stream Stream<String> stream = Stream.of("Apple", "Banana", "Cherry"); // 打印 Stream 中的元素 stream.forEach(System.out::println); } }
4. 通過生成器創(chuàng)建 Stream
import java.util.stream.Stream; public class StreamGenerate { public static void main(String[] args) { // 通過 Stream.generate() 方法創(chuàng)建無限流 Stream<String> infiniteStream = Stream.generate(() -> "Apple"); // 限制流的大小并打印前5個元素 infiniteStream.limit(5).forEach(System.out::println); } }
5. 通過迭代器創(chuàng)建 Stream
import java.util.stream.Stream; public class StreamIterate { public static void main(String[] args) { // 通過 Stream.iterate() 方法創(chuàng)建無限流 Stream<Integer> infiniteStream = Stream.iterate(1, n -> n + 1); // 限制流的大小并打印前5個元素 infiniteStream.limit(5).forEach(System.out::println); } }
6. 通過文件讀取創(chuàng)建 Stream
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream; public class FileToStream { public static void main(String[] args) { try { // 通過 Files.lines() 方法從文件中創(chuàng)建 Stream Stream<String> lines = Files.lines(Paths.get("path/to/your/file.txt")); // 打印文件中的每一行 lines.forEach(System.out::println); // 關(guān)閉 Stream lines.close(); } catch (IOException e) { e.printStackTrace(); } } }
在Java 8中,??Stream??? API 是處理集合數(shù)據(jù)的一種非常強(qiáng)大的工具,它允許你以聲明式的方式處理數(shù)據(jù)集合。創(chuàng)建 ??Stream??? 的方式有很多種,下面詳細(xì)介紹幾種常見的創(chuàng)建 ??Stream?? 的方法,并提供相應(yīng)的代碼示例。
1. 從集合創(chuàng)建
你可以從任何實現(xiàn)了 ??Collection?? 接口的集合(如 ??List??、??Set?? 等)中創(chuàng)建一個 ??Stream??。
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class StreamFromCollection { public static void main(String[] args) { List<String> list = Arrays.asList("Apple", "Banana", "Cherry"); // 從List創(chuàng)建Stream Stream<String> stream = list.stream(); // 使用Stream stream.forEach(System.out::println); } }
2. 從數(shù)組創(chuàng)建
你可以從數(shù)組直接創(chuàng)建 ??Stream??。
import java.util.stream.Stream; public class StreamFromArray { public static void main(String[] args) { String[] array = {"Apple", "Banana", "Cherry"}; // 從數(shù)組創(chuàng)建Stream Stream<String> stream = Arrays.stream(array); // 使用Stream stream.forEach(System.out::println); } }
3. 從值創(chuàng)建
使用 ??Stream.of()?? 方法可以從一系列值創(chuàng)建一個 ??Stream??。
import java.util.stream.Stream; public class StreamOfValues { public static void main(String[] args) { // 從值創(chuàng)建Stream Stream<String> stream = Stream.of("Apple", "Banana", "Cherry"); // 使用Stream stream.forEach(System.out::println); } }
4. 生成無限流
??Stream?? API 提供了兩種生成無限流的方法:??iterate?? 和 ??generate??。這些流理論上是無限的,但可以通過 ??limit?? 操作來限制大小。
使用 ??iterate??
import java.util.stream.Stream; public class InfiniteStreamIterate { public static void main(String[] args) { // 生成無限流,從0開始每次加2 Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 2); // 限制流的大小為5 infiniteStream.limit(5).forEach(System.out::println); } }
使用 ??generate??
import java.util.Random; import java.util.stream.Stream; public class InfiniteStreamGenerate { public static void main(String[] args) { Random random = new Random(); // 生成無限流,每個元素都是隨機(jī)數(shù) Stream<Double> infiniteStream = Stream.generate(random::nextDouble); // 限制流的大小為5 infiniteStream.limit(5).forEach(System.out::println); } }
5. 文件行讀取
可以使用 ??Files.lines?? 方法從文件中讀取行并創(chuàng)建 ??Stream??。
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream; public class StreamFromFile { public static void main(String[] args) { try (Stream<String> lines = Files.lines(Paths.get("path/to/your/file.txt"))) { // 處理每一行 lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } } }
到此這篇關(guān)于Java8中創(chuàng)建Stream流的幾種常見方式介紹的文章就介紹到這了,更多相關(guān)Java8創(chuàng)建Stream流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot啟動之SpringApplication初始化詳解
這篇文章主要介紹了SpringBoot啟動之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報錯,需要的朋友可以參考下2024-01-01MAVEN_HOME、M2_HOME,maven環(huán)境變量設(shè)置方式
這篇文章主要介紹了MAVEN_HOME、M2_HOME,maven環(huán)境變量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes
這篇文章主要介紹了springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot權(quán)限認(rèn)證Sa-Token的使用總結(jié)
Sa-Token是一款輕量級Java權(quán)限認(rèn)證框架,適用于快速搭建權(quán)限系統(tǒng),它提供了豐富的功能,包括登錄認(rèn)證、權(quán)限驗證、角色驗證、Session會話管理等,并且具有良好的社區(qū)支持和文檔資源,下面重點給大家介紹SpringBoot權(quán)限認(rèn)證Sa-Token的使用,感興趣的朋友一起看看吧2025-02-02SpringBoot之自定義Filter獲取請求參數(shù)與響應(yīng)結(jié)果案例詳解
這篇文章主要介紹了SpringBoot之自定義Filter獲取請求參數(shù)與響應(yīng)結(jié)果案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09