在OCP学习手册中,有一系列我完全不了解的代码。它是这样的:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
这是否仅使用一个名为chimp的元素创建无限流,或者它是否无限生成黑猩猩字符串。谢谢。
答案 0 :(得分:1)
Stream java.util.stream.Stream.generate(供应商)
返回无限顺序无序流,其中每个元素由提供的供应商生成。这适用于生成恒定流,随机元素流等。
它将创建一个无限Stream
,这意味着Stream
具有无限数量的元素。所有元素都是相同的String
实例,因为"chimp"
将始终从String
池返回相同的String
实例。
如果您将其更改为
Stream<String> infinite = Stream.generate(() -> new String("chimp"));
此String
的每个Stream
元素都是唯一的实例。
答案 1 :(得分:1)
除非流管道中有终端操作,否则不会发生任何事情,请参阅Stream operations and pipelines部分。例如这段代码:
infinite.forEach(System.out::println); // chimp ....
将打印不定数量的chimp
字符串。
但是这行只会打印一个String
infinite.limit(1).forEach(System.out::println); // chimp
另一方面
Stream.generate(() -> "chimp");
没有效果,流的管道中没有终端操作。
中间操作返回一个新流。他们总是懒惰; 执行诸如filter()之类的中间操作实际上并不是这样 执行任何过滤,而是创建一个新的流,当时 遍历,包含匹配的初始流的元素 给出谓词。直到管道源的遍历才开始 执行管道的终端操作。