Java Stream函數語言程式設計案例圖文詳解
導讀
作者計劃把Java Stream寫成一個系列的文章,本文只是其中一節。更多內容期待您關注我的號!
一、什麼是Java Stream?
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管道處理之後,轉化為另一組集合或資料輸出。
我們先來看一個例子:
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"));
期待您的關注
- 博主最近新寫了一本書:
- 本文轉載註明出處(必須帶連線,不能只轉文字):。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2823993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 函數語言程式設計(三)流(Stream)Java函數程式設計
- 淺談函數語言程式設計與 Java Stream函數程式設計Java
- 快速掌握Java8 Stream函數語言程式設計技巧Java函數程式設計
- Java中的函數語言程式設計(八)流Stream並行程式設計Java函數程式設計並行行程
- python函數語言程式設計詳解Python函數程式設計
- Java 函數語言程式設計Java函數程式設計
- 函數語言程式設計(Lambda、Stream流、Optional等)函數程式設計
- 簡化stream流等工具類(函數語言程式設計的應用案例)函數程式設計
- JDK 8 新特性之函數語言程式設計 → Stream APIJDK函數程式設計API
- C#函數語言程式設計思想及案例C#函數程式設計
- Java中的函數語言程式設計(七)流Stream的Map-Reduce操作Java函數程式設計
- Java 8用函數語言程式設計實現集合操作案例Java函數程式設計
- 函數語言程式設計函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- Java 函數語言程式設計的前生今世Java函數程式設計
- Java8的函數語言程式設計Java函數程式設計
- Java函數語言程式設計知識分享!Java函數程式設計
- 對函數語言程式設計的誤解函數程式設計
- 函數語言程式設計,真香函數程式設計
- javascript函數語言程式設計JavaScript函數程式設計
- 初探函數語言程式設計函數程式設計
- 函數語言程式設計初探函數程式設計
- JavaScript 函數語言程式設計JavaScript函數程式設計
- 《Java 8函數語言程式設計》選讀:為什麼要給Java 8中加入函數語言程式設計?Java函數程式設計
- 重識Java8函數語言程式設計Java函數程式設計
- Java技術分享之函數語言程式設計!Java函數程式設計
- Java技術分享之函數語言程式設計Java函數程式設計
- Java 函數語言程式設計(二)Lambda表示式Java函數程式設計
- Java 函數語言程式設計(一)初識篇Java函數程式設計
- Java8 新特性 —— 函數語言程式設計Java函數程式設計
- Java8函數語言程式設計應用Java函數程式設計
- 書推薦《Java 8函數語言程式設計》Java函數程式設計
- 淺談Java 8的函數語言程式設計Java函數程式設計
- Java 帝國之函數語言程式設計(上)Java函數程式設計
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- 幽默圖:升級到Java 8使用函數語言程式設計以後Java函數程式設計
- 函數語言程式設計雜談函數程式設計
- 初見函數語言程式設計函數程式設計