簡體   English   中英

Java 8 Stream是安全的返回類型嗎?

[英]Is Java 8 Stream a safe return type?

Java 8 Streams是否是公共方法的安全返回類型,因為在給定流的基礎對象時不可能改變它?

例如,如果我有一個Listreturn list.stream(); 可以以任何方式使用返回值來改變原始列表嗎?

從API來看,我認為這不可能,但我想確認一下。

是的,這樣做是安全的。 流不會/不應該修改基礎數據結構。

java.util.stream.Stream的一些摘錄:

一系列元素[...]。

收藏和流雖然有一些膚淺的相似之處,但卻有不同的目標。 館藏主要關注其元素的有效管理和訪問。 相比之下, 流不提供直接訪問或操縱其元素的手段 [...]。

為了保持正確的行為,[流操作的行為參數...]必須是非干擾的(它們不會修改流源)。

並從Package java.util.stream描述

Streams在幾個方面與集合不同:

  • 沒有存儲空間 流不是存儲元素的數據結構 ; 相反,它通過計算操作管道傳遞來自源[...]的元素。
  • 功能性。 對流的操作會產生結果,但不會修改其源。

您可能還會看到無干擾


[...]如果給出來自它的流,則不可能改變底層對象。

雖然可以編寫我們自己java.util.Stream實現來修改底層數據結構,但這樣做是錯誤的。 ;


回應@AlexisC的評論:

從列表中獲取流可以修改其內容(如果它包含可變對象)。

這是一個公平的觀點。 如果我們有一個可變元素流,我們可以這樣做:

myObj.stream().forEach(( Foo foo ) -> ( foo.bar = baz ));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM