[英]Is Java 8 Stream a safe return type?
Java 8 Streams是否是公共方法的安全返回類型,因為在給定流的基礎對象時不可能改變它?
例如,如果我有一個List
並return 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.