arc*_*rty 11 java java-8 java-stream
Java 8 Streams是否是公共方法的安全返回类型,因为在给定流的基础对象时不可能改变它?
例如,如果我有一个List并且return list.stream();可以以任何方式使用返回值来改变原始列表吗?
从API来看,我认为这不可能,但我想确认一下.
Rad*_*def 13
是的,这样做是安全的.流不会/不应该修改基础数据结构.
甲序列元素[...].
收藏和流虽然有一些肤浅的相似之处,但却有不同的目标.馆藏主要关注其元素的有效管理和访问.相比之下,流不提供直接访问或操纵其元素的手段 [...].
为了保持正确的行为,[流操作的行为参数...]必须是非干扰的(它们不会修改流源).
Streams在几个方面与集合不同:
- 没有存储空间 流不是存储元素的数据结构 ; 相反,它通过计算操作管道传递来自源[...]的元素.
- 功能性.对流的操作会产生结果,但不会修改其来源.
您可能还会看到无干扰.
[...]如果给出来自它的流,则不可能改变底层对象.
虽然可以编写我们自己的java.util.Stream修改底层数据结构的实现,但这样做是错误的.; )
回应@AlexisC的评论:
从列表中获取流可以修改其内容(如果它包含可变对象).
这是一个公平的观点.如果我们有一个可变的元素流,我们可以这样做:
myObj.stream().forEach(( Foo foo ) -> ( foo.bar = baz ));
Run Code Online (Sandbox Code Playgroud)