Skip to content

Commit 249b4a7

Browse files
committed
More document of MoreStreams.generate() to emphasize finite stream generation.
1 parent 4fdd0ba commit 249b4a7

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ for (Object obj : iterateOnce(stream)) {
100100
}
101101
```
102102
103-
**Example 3: to generate a (potentially infinite) stream iteratively:**
103+
**Example 3: to generate a stream (that can be finite) iteratively:**
104104
```java
105105
// Returns next round of elements, or empty to stop generating.
106106
private Stream<T> nextValues(T currentValue) {

core/src/main/java/com/google/mu/util/stream/MoreStreams.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,17 @@ public final class MoreStreams {
3838
* {@code seed}, producing a Stream consisting of seed, elements of step(seed),
3939
* elements of step(x) for each x in step(seed), etc.
4040
*
41+
* <p>While {@code Stream.generate(supplier)} can be used to generate infinite streams,
42+
* it's not as easy to generate a <em>finite</em> stream unless the size can be pre-determined.
43+
* This method can be used to generate finite streams: just return an empty stream when the
44+
* {@code step} determines that there's no more elements to be generated.
45+
*
46+
* <p>At every step, 0, 1 or more elements can be generated into the resulting stream.
47+
* As discussed above, returning an empty stream leads to eventual termination of the stream;
48+
* returning 1-element stream is equivalent to {@code Stream.generate(supplier)};
49+
* while returning more than one elements allows a single element to fan out to multiple
50+
* elements.
51+
*
4152
* @since 1.9
4253
*/
4354
public static <T> Stream<T> generate(

0 commit comments

Comments
 (0)