
下面是視頻(優酷的清晰度有限):還是建議大家去B站觀看:[B站觀看地址](https://www.bilibili.com/video/BV1sE411P7C1/)。如果您覺得我做的工作對您有幫助,請去B站點贊、關注、轉發、收藏,您的支持是我不竭的創作動力!
```[youku]
XNDU5NTk4MjI4MA
```
## 一、什么是Java Stream API?
Java Stream函數式編程接口最初是在Java 8中引入的,并且與lambda一起成為Java開發的里程碑式的功能特性,它極大的方便了開放人員處理集合類數據的效率。從筆者之前看過的調查文章顯示,絕大部分的開發者使用的JDK版本是java 8,其中Java Stream和lambda功不可沒。
Java Stream就是一個數據流經的管道,并且在管道中對數據進行操作,然后流入下一個管道。有學過linux 管道的同學應該會很容易就理解。在沒有Java Stram之前,對于集合類的操作,更多的是通過for循環。大家從后文中就能看出Java Stream相對于for 循環更加簡潔、易用、快捷。
管道的功能包括:Filter(過濾)、Map(映射)、sort(排序)等,集合數據通過Java Stream管道處理之后,轉化為另一組集合或數據輸出。

## 二、Stream API代替for循環
我們先來看一個例子:
```
List<String> nameStrs = Arrays.asList("Monkey", "Lion", "Giraffe","Lemur");
List<String> list = nameStrs.stream()
.filter(s -> s.startsWith("L"))
.map(String::toUpperCase)
.sorted()
.collect(toList());
System.out.println(list);
```
* 首先,我們使用Stream()函數,將一個List轉換為管道流
* 調用filter函數過濾數組元素,過濾方法使用lambda表達式,以L開頭的元素返回true被保留,其他的List元素被過濾掉
* 然后調用Map函數對管道流中每個元素進行處理,字母全部轉換為大寫
* 然后調用sort函數,對管道流中數據進行排序
* 最后調用collect函數toList,將管道流轉換為List返回
最終的輸出結果是:[LEMUR, LION]。大家可以想一想,上面的這些對數組進行遍歷的代碼,如果你用for循環來寫,需要寫多少行代碼?來,我們來繼續學習Java Stream吧!
## 三、將數組轉換為管道流
使用Stream.of()方法,將數組轉換為管道流。
```
String[] array = {"Monkey", "Lion", "Giraffe", "Lemur"};
Stream<String> nameStrs2 = Stream.of(array);
Stream<String> nameStrs3 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
```
## 四、將集合類對象轉換為管道流
通過調用集合類的stream()方法,將集合類對象轉換為管道流。
```
List<String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
Stream<String> streamFromList = list.stream();
Set<String> set = new HashSet<>(list);
Stream<String> streamFromSet = set.stream();
```
## 五、將文本文件轉換為管道流
通過Files.lines方法將文本文件轉換為管道流,下圖中的Paths.get()方法作用就是獲取文件,是Java NIO的API!
也就是說:我們可以很方便的使用Java Stream加載文本文件,然后逐行的對文件內容進行處理。
```
Stream<String> lines = Files.lines(Paths.get("file.txt"));
```
- 前言
- 1.lambda表達式會用了么
- 2.初識Stream-API
- 3.Stream的filter與謂語邏輯
- 4.Stream管道流的map操作
- 5.Stream的狀態與并行操作
- 6.Stream性能差?不要人云亦云
- 7.像使用SQL一樣排序集合
- 8.函數式接口Comparator
- 9.Stream查找與匹配元素
- 10.Stream集合元素歸約
- 11.StreamAPI終端操作
- 12.java8如何排序Map
- Stream流逐行文件處理
- java8-forEach(持續發布中)
- 筆者其它作品推薦
- vue深入淺出系列
- 手摸手教你學Spring Boot2.0
- Spring Security-JWT-OAuth2一本通
- 實戰前后端分離RBAC權限管理系統
- 實戰SpringCloud微服務從青銅到王者