Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个流对象是创建一个无限的黑猩猩对象列表,还是只创建一个黑猩猩对象?_Java_Java Stream - Fatal编程技术网

Java 这个流对象是创建一个无限的黑猩猩对象列表,还是只创建一个黑猩猩对象?

Java 这个流对象是创建一个无限的黑猩猩对象列表,还是只创建一个黑猩猩对象?,java,java-stream,Java,Java Stream,在OCP研究书中,有一行代码我并不完全理解。事情是这样的: Stream<String> infinite = Stream.generate(() -> "chimp"); Stream infinite=Stream.generate(()->“chimp”); 这是创建一个只有一个名为chimp的元素的无限流,还是无限生成chimp字符串。多谢各位 流java.util.Stream.Stream.generate(供应商) 返回无限顺序无序流,其中每个元素由提供的供

在OCP研究书中,有一行代码我并不完全理解。事情是这样的:

Stream<String> infinite = Stream.generate(() -> "chimp");
Stream infinite=Stream.generate(()->“chimp”);
这是创建一个只有一个名为chimp的元素的无限流,还是无限生成chimp字符串。多谢各位

流java.util.Stream.Stream.generate(供应商)

返回无限顺序无序流,其中每个元素由提供的供应商生成。这适用于生成恒定流、随机元素流等

它将创建一个无限的
,这意味着一个元素数量无限的
流。所有元素都将是相同的
String
实例,因为
“chimp”
将始终从
String
池返回相同的
String
实例

如果你把它改成

Stream<String> infinite = Stream.generate(() -> new String("chimp"));
Stream infinite=Stream.generate(()->新字符串(“chimp”);
的每个
字符串
元素都将是唯一的实例

流java.util.Stream.Stream.generate(供应商)

返回无限顺序无序流,其中每个元素由提供的供应商生成。这适用于生成恒定流、随机元素流等

它将创建一个无限的
,这意味着一个元素数量无限的
流。所有元素都将是相同的
String
实例,因为
“chimp”
将始终从
String
池返回相同的
String
实例

如果你把它改成

Stream<String> infinite = Stream.generate(() -> new String("chimp"));
Stream infinite=Stream.generate(()->新字符串(“chimp”);

流的每个
字符串
元素都将是唯一的实例。

除非流管道中有终端操作,否则不会发生任何事情。请参见第节。例如,此代码:

infinite.forEach(System.out::println); // chimp ....
将打印不定数的
chimp
字符串。 但是,此行将只打印一个字符串

infinite.limit(1).forEach(System.out::println); // chimp 
在另一边

Stream.generate(() -> "chimp");
没有效果,流的管道中没有终端操作

中间操作返回一个新的流。他们总是懒惰; 执行诸如filter()之类的中间操作实际上不会 执行任何筛选,但创建一个新流,当 遍历,包含与 给定谓词。管道源的遍历直到 执行管道的终端操作


除非在流管道中有终端操作,否则不会发生任何事情。请参见第节。例如,此代码:

infinite.forEach(System.out::println); // chimp ....
将打印不定数的
chimp
字符串。 但是,此行将只打印一个字符串

infinite.limit(1).forEach(System.out::println); // chimp 
在另一边

Stream.generate(() -> "chimp");
没有效果,流的管道中没有终端操作

中间操作返回一个新的流。他们总是懒惰; 执行诸如filter()之类的中间操作实际上不会 执行任何筛选,但创建一个新流,当 遍历,包含与 给定谓词。管道源的遍历直到 执行管道的终端操作


试试看你可以查阅文档,也可以自己试试。。。。你真的不费吹灰之力,试试看你可以查阅文档,也可以自己试试。。。。你真的不费吹灰之力,好吧,如果我理解正确的话,只有当像forEach(System.out::println)这样的终端操作方法在流实例上运行时,流才会开始生成那些chimp字符串?@Maurice,是的。您可以根据需要应用任意多个中间操作,但除非有一个终端操作,否则它们没有任何效果。从java文档:中间操作返回一个新流。他们总是懒惰;执行中间操作(如filter())实际上并不执行任何过滤,而是创建一个新的流,当遍历该流时,该流包含与给定谓词匹配的初始流元素。在执行管道的终端操作之前,管道源的遍历不会开始。因此,如果我理解正确,只有当终端操作方法(如forEach(System.out::println))在流实例上运行时,流才会开始生成这些chimp字符串?@Maurice,是的。您可以根据需要应用任意多个中间操作,但除非有一个终端操作,否则它们没有任何效果。从java文档:中间操作返回一个新流。他们总是懒惰;执行中间操作(如filter())实际上并不执行任何过滤,而是创建一个新的流,当遍历该流时,该流包含与给定谓词匹配的初始流元素。在执行管道的终端操作之前,不会开始遍历管道源。