@SuppressWarnings("varargs")
    @SafeVarargs // Creating a Stream of an array is safe.
    public static <T> Stream<T> concat(Stream<T>... streams) {
        requireNonNullElements(streams);
        return Stream.of(streams).flatMap(Function.identity());
    }
Creates a concatenated Stream whose elements are are all the
elements of the streams in sequential order. The resulting Stream is
ordered if all of the input streams are ordered, and parallel if at least
one of the input streams are parallel.

<p>
Streams are processed one at at time. When one is exhausted, a new one
will start. Parallelism is only supported within the individual streams
provided.
<p>
N.B. 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 StackOverflowException}.

@param <T> The type of stream elements
@param streams to concatenate
@return the concatenation of the input streams
runtime-parent/runtime-core/src/main/java/com/speedment/runtime/core/util/StreamComposition.java