Java Stream函數語言程式設計案例圖文詳解

duanhao發表於2021-09-09

圖片描述

導讀

作者計劃把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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章