< prev index next >

src/java.base/share/classes/java/util/stream/IntStream.java

Print this page
rev 47861 : 8181175: Stream.concat behaves like terminal operation
Reviewed-by: smarks, briangoetz, dfuchs

*** 1079,1093 **** --- 1079,1109 ---- * second stream. The resulting stream is ordered if both * of the input streams are ordered, and parallel if either of the input * streams is parallel. When the resulting stream is closed, the close * handlers for both input streams are invoked. * + * <p>This method operates on the two input streams and binds each stream + * to its source. As a result subsequent modifications to an input stream + * source may not be reflected in the concatenated stream result. + * * @implNote * Use caution when constructing streams from repeated concatenation. * Accessing an element of a deeply concatenated stream can result in deep * call chains, or even {@code StackOverflowError}. * + * @apiNote + * To preserve optimization opportunities this method binds each stream to + * its source and accepts only two streams as parameters. For example, the + * exact size of the concatenated stream source can be computed if the exact + * size of each input stream source is known. + * To concatenate more streams without binding, or without nested calls to + * this method, try creating a stream of streams and flat-mapping with the + * identity function, for example: + * <pre>{@code + * IntStream concat = Stream.of(s1, s2, s3, s4).flatMapToInt(s -> s); + * }</pre> + * * @param a the first stream * @param b the second stream * @return the concatenation of the two input streams */ public static IntStream concat(IntStream a, IntStream b) {
< prev index next >