1. 程式人生 > >Java 8 建立 Stream 的 10 種方式,我保證你受益無窮!

Java 8 建立 Stream 的 10 種方式,我保證你受益無窮!

之前棧長分享過 Java 8 一系列新特性的文章,其中重點介紹了 Stream.

獲取上面這份 Java 8~12 系列新特性乾貨文章,請在微信搜尋關注微信公眾號:Java技術棧,在公眾號後臺回覆:java。

今天來分享下在 Java 8 中建立 Stream 的 10 種方式,我就整理了 10 種,其實還有更多,僅供大家參考學習下。

1、Stream.of 可變引數

Stream<String> stream1 = Stream.of("A", "B", "C");
System.out.println("stream1:" + stream1.collect(joining()));

程式輸出:

stream1:ABC

2、Stream.of 陣列

String[] values = new String[]{"A", "B", "C"};
Stream<String> stream2 = Stream.of(values);
System.out.println("stream2:" + stream2.collect(joining()));

程式輸出:

stream2:ABC

看 Stream.of 原始碼,上面這兩種方式其實就是第三種方式的包裝版。

public static<T> Stream<T> of(T... values) {
    return Arrays.stream(values);
}

我們直接使用原始碼中的方式也是一樣的。

3、Arrays.stream

String[] values = new String[]{"A", "B", "C"};
Stream<String> stream3 = Arrays.stream(values);
System.out.println("stream3:" + stream3.collect(joining()));

程式輸出:

stream3:ABC

4、List

List<String> list = Arrays.asList("A", "B", "C");
Stream<String> stream4 = list.stream();
System.out.println("stream4:" + stream4.collect(joining()));

程式輸出:

stream4:ABC

5、Set

Set<String> set = new HashSet<>(Arrays.asList("A", "B", "C"));
Stream<String> stream5 = set.stream();
System.out.println("stream5:" + stream5.collect(joining()));

程式輸出:

stream5:ABC

6、Map

Map<String, String> map = new HashMap<>();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
Stream<String> stream6 = map.values().stream();
System.out.println("stream6:" + stream6.collect(joining()));

程式輸出:

stream6:ABC

7、Stream.iterate

Stream<String> stream7 = Stream.iterate("A", e -> String.valueOf((char) (e.charAt(0) + 1))).limit(3);
System.out.println("stream7:" + stream7.collect(joining()));

程式輸出:

stream7:ABC

8、Pattern

String value = "A B C";
Stream<String> stream8 = Pattern.compile("\\W").splitAsStream(value);
System.out.println("stream8:" + stream8.collect(joining()));

程式輸出:

stream8:ABC

9、Files.lines

try {
    Stream<String> stream9 = Files.lines(Paths.get("d:/data.txt"));
    System.out.println("stream9:" + stream9.collect(joining()));
} catch (IOException e) {
    e.printStackTrace();
}

data.txt檔案內容如下:

A
B
C

程式輸出:

stream9:ABC

10、Stream.generate

Stream<String> stream10 = Stream.generate(() -> "A").limit(3);
System.out.println("stream10:" + stream10.collect(joining()));

程式輸出:

stream10:AAA

好了,這是棧長整理的 10 種建立 Stream 的方式,是不是很騷?如果你還知道其他的騷操作,可以留言告訴大家,讓大家記住你的頭像和ID。

轉發分享一下吧,我保證你日後總有機會用得著的。

大量 Java 8~12 的新特性文章我正在編寫中,棧長將陸續分享出來,微信搜尋關注微信公眾號:Java技術棧,公眾號將第一時間推送,不要錯過。

本文原創首發於微信公眾號:Java技術棧(id:javastack),轉載請原樣保留本資訊。

相關推薦

Java 8 建立 Stream10 方式保證受益無窮!

之前棧長分享過 Java 8 一系列新特性的文章,其中重點介紹了 Stream. 獲取上面這份 Java 8~12 系列新特性

java之執行緒建立的兩方式狀態和匿名內部類建立子類或實現類物件

一.匿名內部類建立子類或實現類物件 new Test(){} 相當於建立了Test類的子類物件 並且沒有類名 建立介面實現類 new 介面名() {};介面實現類的物件 注意 : new 後邊是類或者介面名 大括號內是類或者介面中的方法 public

java反射class的三方式反射建立物件的兩方式

反射中,欲獲取一個類或者呼叫某個類的方法,首先要獲取到該類的 Class 物件。 1、獲取Class物件 在 Java API 中,提供了獲取 Class 類物件的三種方法: 第一種,使用 Class.forName 靜態方法。 前提:已明確類的全路徑名。 第二種,

java異常處理的九方式都知道並且會用嗎?

處理 Java 中的異常情況並不是個輕鬆的話題,什麼樣的異常需要如何處理,常讓新手們覺得難以理解,甚至有經驗的開發人員也可能花幾個小時討論不決。 正因如此,大多數開發團隊有著一套自己的規則,如果你是團隊裡的新人,你會對團隊之間對於這個規則的巨大差別感到驚訝。 即便是這樣,也有一些大多數團隊都

java 獲取時間的幾方式以及SimpleDateFormat裡引數的解釋 等

1、通過Date類來獲取當前時間 Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(

看完這篇部落格保證肯定會做介面測試了。

最近給公司的新員工培訓web api介面測試,發現這一塊的內部需求還比較大,不僅僅是新員工,包括一些經常寫介面測試老員工,對介面也是似懂非懂的,所以我絕對有必要寫一篇部落格來普及下。 在我們公司內部,一般使用ruby或者python語言來做介面測試,這篇檔案主要是講解使用python語言來做介面測試。 如果要

java中內部類的建立情況方式及內部資料訪問許可權

內部類和外部類的關係,及內部靜態類的資料訪問許可權,宣告方式。 第一種,在外部類內部宣告使用內部類,內部類的型別為static和非 static型別,內部類資料型別為private,protected,public 型別的訪問許可權。外部類為非靜態宣告和許可權如下: p

Java代碼加密的兩方式防止反編譯

java加密使用Virbox Protector對Java項目加密有兩種方式,一種是對War包加密,一種是對Jar包加密。Virbox Protector支持這兩種文件格式加密,可以加密用於解析class文件的java.exe,並且可以實現項目源碼綁定制定設備,防止部署到客戶服務器的項目被整體拷貝。兩種加密方

Maven執行TestNG的testcase 兩方式testng.xmltestngCase.java

詳情參照: http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html 1.maven通過maven-surefire-plugin來執行maven專案中src/test/j

實現java多執行緒的3方式99%人沒用過第3

實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利

Java執行緒建立的兩方式

package test; /**  * 建立執行緒  *  */ public class Demo1 {      public static void main(String arg[]){

JAVA 8Stream API操作別再使用if-else迴圈了

在這篇文章裡,我們將會去了解傳統迴圈的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允許我們去表達我們想要完成什麼而不是要怎樣做。這正是迴圈的不足之處。要確保迴圈的靈活性是需要付出代價的。return、break 或者 continue都會顯著地改變迴圈的實際表現。這迫使我們不僅

Java多執行緒建立的三方式與對比

一、繼承Thread類建立執行緒類 1、定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體代表了執行緒需要完成的任務,即執行緒的執行體。 2、建立Thread子類的例項,即建立執行緒物件。 3、呼叫執行緒物件的start()方法來啟動該執行緒

java中實現單例模式的幾方式簡單易懂

一、餓漢式單例類 public class Singleton { private Singleton(){ } private static Singleton instance = new Singleton();

Java ZXing 生成QRCode二維碼的兩方式可設定圖片大小和外白色邊框大小

QRGen在ZXing基礎上開發,這個庫使得利用Java生成QR碼變為小菜一碟。它需要依賴ZXing,所以生成圖案時你同時需要ZXing和QRGen的jar包。 QR 碼最常見的應用便是為網站中一個特定的網頁或下載頁帶來流量。因此,QR碼常常會編碼URL或網站地址,使用者可以通過手機攝像頭掃描,並在其瀏覽器中

Java 多執行緒傳值有三方式以及另類的第四方式

現在博主的需求是:有可能在同一個執行緒類執行不一樣的程式。上邊兩個紅框中的cron4j排程器使用的是一個,根據引數不同來執行的。如果我點選後邊的手動執行一次,按照我上邊給出的java程式碼是無法實現的。看下邊的新的程式碼: (adsbygoogle = window.adsbygoo

php 模擬http傳送請求三方式(curl,stream流的方式

一,curl cURL 是一個用來傳輸資料的工具,支援多種協議,如在 Linux 下用 curl 命令列可以傳送各種 HTTP 請求。PHP 的 cURL 是一個底層的庫,它能根據不同協議跟各種伺服器通訊,HTTP 協議是其中一種。 post請求 public

java--(多執行緒建立的兩方式Thread類和Runnable介面)

(一)繼承Thread類建立多執行緒----單執行緒下面的程式碼是一個死迴圈,但是不會執行main裡面的迴圈語句,而是run()裡面的語句,這是因為該程式是一個單執行緒程式,當呼叫MyThread類的run()方法時,遇到死迴圈,迴圈一直進行。因此,MyThread類的列印

建立執行緒的幾方式以及為什麼啟動執行緒不用run而用start方法!!!

首先,我們大家都知道,建立執行緒的兩種蛀主要的方法,一種是繼承Thread類,另一種是實現Runnable介面。對於第一種建立執行緒的方式有兩個不足: 1.當前執行緒重寫run方法定義該執行緒要完成的工作,這就導致了任務是定義線上程內部的,於是執行緒與任務有一個強耦合關

客觀面試題--8.執行緒的生命週期是什麼?執行緒建立有幾方式?

1.執行緒的生命週期執行緒是一個動態執行的過程,它也有一個從產生到死亡的過程。(1)生命週期的五種狀態新建(new Thread)當建立Thread類的一個例項(物件)時,此執行緒進入新建狀態(未被啟動)。例如:Thread  t1=new Thread();就緒(runna