成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[392376]]

本文轉載自微信公眾號「碼農小胖哥」,作者碼農小胖哥 。轉載本文請聯系碼農小胖哥公眾號。

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

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

Stream的特點

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

Stream 并非數據結構

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

Stream有點類似于水管網絡。

無固定大小

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

惰性化

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

  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)操作,不需要編寫額外的多線程代碼,所有的操作會自動并行進行。不過大多數情況下我們都是串行執行。

我們該如何選擇

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

看API操作

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

看初始化成本

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

看結果集大小

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

是否改變原始數據

Stream不會改變原始的數據,而Collection可以實現這一點。

是要數據容器還是數據管道。

是否需要重用對象實例

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

是否需要固定的格式

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

在Spring MVC中,Stream的展現為數組。

總結

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

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2020-10-21 14:54:02

RustGolang開發

2011-08-08 15:43:01

MySQL索引

2021-11-26 09:00:00

數據庫數據集工具

2019-11-29 07:53:07

DNSTCP網絡協議

2020-12-13 14:32:22

5GWi-Fi 6

2021-12-09 09:52:36

云原生安全工具云安全

2013-08-21 15:06:31

iOSself.

2012-02-08 11:01:53

HibernateJava

2024-04-16 12:00:14

API系統

2024-08-01 10:10:24

MySQL場景搜索

2020-10-10 10:20:11

云計算云安全技術

2011-04-15 17:07:13

Java

2025-05-19 08:13:45

2021-04-25 15:06:16

微軟虛擬桌面IT

2021-06-01 11:11:26

物聯網互聯網IoT

2023-11-10 12:55:00

消息代理事件代理

2021-04-14 07:52:00

Vue 作用域插槽

2020-02-25 16:00:28

JavaScript數據技術

2018-12-12 09:59:47

微服務架構分布式系統

2024-10-07 08:49:25

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品自在在线观看 | 亚洲欧美综合 | 国产欧美日韩一区二区三区 | 亚洲午夜视频 | 中国一级特黄毛片大片 | 久久久久久免费观看 | 国产日韩欧美一区二区 | 妖精视频一区二区三区 | 成人亚洲视频 | 黄色网毛片 | 中文字幕精品一区二区三区精品 | 麻豆精品国产91久久久久久 | 免费看a | 精品九九 | 久久中文网 | 婷婷国产一区 | 亚洲国产免费 | 欧美成人一区二区三区片免费 | 亚洲精品www久久久久久广东 | 国产精品一区在线观看 | 羞羞视频在线观免费观看 | 九九热国产视频 | 欧美性极品xxxx做受 | 完全免费av在线 | 精品成人av | 孰女乱色一区二区三区 | 亚洲精品福利在线 | 欧美高清视频一区 | 欧美久久久久久久久中文字幕 | 亚洲欧美在线一区 | 天天操欧美 | 国产成人一区在线 | 国产亚洲精品美女久久久久久久久久 | 成人免费影院 | 精品一区二区三区在线视频 | 日韩视频在线免费观看 | 亚洲国产在 | 精品96久久久久久中文字幕无 | 日本不卡一区二区三区 | www..com18午夜观看 | 亚洲狠狠 |