[英]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.