偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

何時使用Java Stream,何時使用Java集合框架

開發(fā) 后端
Java 8 的Stream API 提供了不少可替代Java 集合框架的操作。但是不少同學在學習和使用Stream時依然感到很困惑,不知道何時使用Stream,甚至想不起來使用Stream,甚至在Stream和集合框架的選擇上也成了問題。今天胖哥將嘗試幫你解決這些疑問。

[[392376]]

本文轉載自微信公眾號「碼農(nóng)小胖哥」,作者碼農(nóng)小胖哥 。轉載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

Java 8 的Stream API 提供了不少可替代Java 集合框架的操作。但是不少同學在學習和使用Stream時依然感到很困惑,不知道何時使用Stream,甚至想不起來使用Stream,甚至在Stream和集合框架的選擇上也成了問題。今天胖哥將嘗試幫你解決這些疑問。

本文已經(jīng)假設你入門過了Stream,你也可以通過這一篇來入門學習。

Stream的特點

如果你要用好Stream,你必須搞清楚它的特點。

Stream 并非數(shù)據(jù)結構

雖然我們把Stream和以Collection為代表的集合框架類型放在一起對比,但它只是將數(shù)據(jù)源(Source)中的數(shù)據(jù)元素提取到數(shù)據(jù)操作管道,并按照定義好的規(guī)則(操作符)進行“流動”。另外Stream也絕不修改自己所封裝的底層數(shù)據(jù)結構的數(shù)據(jù)。

Stream有點類似于水管網(wǎng)絡。

無固定大小

水管網(wǎng)絡中流動的水是沒有固定大小的,甚至可以是無限的。Stream也是如此。

惰性化

Stream只有定義終止操作,比如collect(Collector)、forEach(Consumer),它才會開始執(zhí)行。以下從流中篩選以h開頭的字符串并不會執(zhí)行。

  1. Stream.of("hello","wolrd").filter(str-> str.startsWith("h")) 

不變性

一個既定的Stream是不變的,所有的中間操作都會衍生一個新的Stream,即使中間操作不改變Stream中的任何元素。

一次性

一個Stream流只有一次終止操作。一旦完成了終止操作,這個流就關閉了。無法再次進行使用,簡直就是一次性用品。

  1. Stream<String> stringStream = Stream.of("1""2"); 
  2. // forEach 終止操作打印 1  2 流終止 
  3. stringStream.forEach(System.out::println); 
  4. // 重復使用將拋出IllegalStateException異常 stream has already been operated upon or closed 
  5. stringStream.filter(s -> s.equals("2")).forEach(System.out::println); 

并行操作

Stream支持并行化(parallel)操作,不需要編寫額外的多線程代碼,所有的操作會自動并行進行。不過大多數(shù)情況下我們都是串行執(zhí)行。

我們該如何選擇

對于Stream和Collection我們該如何選擇呢?首先Collection的絕大部分場景Stream都可以完成,甚至更好。

看API操作

它們都提供了很多方法,如果你需要獲取元素的個數(shù),集合更加方便一些,如果你要過濾一些元素,很明顯,Stream的API更加方便,甚至它提供了各種可組合的操作。

看初始化成本

對于集合,一旦定義使用需要一次性的加載入內(nèi)存,如果你打算在內(nèi)存中重用這些數(shù)據(jù),使用集合就非常合適;而Stream的惰性特點,在終端操作之前不會有任何的中間操作,這意味著不會上來就初始化數(shù)據(jù)到內(nèi)存,可以降低初始化成本,甚至你可以調(diào)整其執(zhí)行消費元素的速率。

看結果集大小

如果最終的結果是可控的、有限的,它們兩者都能夠勝任;如果結果集非常龐大或者近似無限的,Stream將是不二之選。

是否改變原始數(shù)據(jù)

Stream不會改變原始的數(shù)據(jù),而Collection可以實現(xiàn)這一點。

是要數(shù)據(jù)容器還是數(shù)據(jù)管道。

是否需要重用對象實例

當結果以Collection的形式返回時,我們可以重復使用。而一個Stream被使用后,就認為它已消耗掉,并在重用時拋出IllegalStateException,如上面所示。

是否需要固定的格式

Stream流的表現(xiàn)格式通常沒有Java集合框架豐富,Java集合框架提供了如Set、List、Map等格式。如果你需要終端返回展現(xiàn),顯然集合框架更加合適。

在Spring MVC中,Stream的展現(xiàn)為數(shù)組。

總結

以上是在使用這兩個概念需要考慮的幾個點,其實大多數(shù)情況下,我們只需要看誰的API更加友好,因為它們之間可以相互轉換。顯而易見,Stream更加符合未來的趨勢。

責任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關推薦

2020-10-21 14:54:02

RustGolang開發(fā)

2021-11-26 09:00:00

數(shù)據(jù)庫數(shù)據(jù)集工具

2011-08-08 15:43:01

MySQL索引

2025-08-11 08:05:58

MCP服務工具

2019-11-29 07:53:07

DNSTCP網(wǎng)絡協(xié)議

2021-12-09 09:52:36

云原生安全工具云安全

2020-12-13 14:32:22

5GWi-Fi 6

2013-08-21 15:06:31

iOSself.

2012-02-08 11:01:53

HibernateJava

2024-08-01 10:10:24

MySQL場景搜索

2025-07-29 10:00:00

指針開發(fā)Go

2024-04-16 12:00:14

API系統(tǒng)

2011-04-15 17:07:13

Java

2025-05-19 08:13:45

2020-10-10 10:20:11

云計算云安全技術

2021-04-25 15:06:16

微軟虛擬桌面IT

2021-06-01 11:11:26

物聯(lián)網(wǎng)互聯(lián)網(wǎng)IoT

2018-12-12 09:59:47

微服務架構分布式系統(tǒng)

2024-10-07 08:49:25

2021-04-14 07:52:00

Vue 作用域插槽
點贊
收藏

51CTO技術棧公眾號