繁体   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