public static final <T> Stream<T> insertAt(final Stream<T> stream, final int pos, final T... values) {
        final Tuple2<Stream<T>, Stream<T>> Tuple2 = duplicatePos(stream, pos);
        return appendStream(append(Tuple2._1().limit(pos), values), Tuple2._2().skip(pos));
    }
public static final < T > Stream < T > insertAt ( final Stream < T > stream , final int pos , final T ... values ) { final Tuple2 < Stream < T > , Stream < T > > Tuple2 = duplicatePos ( stream , pos ) ; return appendStream ( append ( Tuple2 . _1 ( ) . limit ( pos ) , values ) , Tuple2 . _2 ( ) . skip ( pos ) ) ; }
Insert data into a stream at given position
<pre>
{@code
List<String> result = 	of(1,2,3).insertAt(1,100,200,300)
.map(it ->it+"!!").collect(CyclopsCollectors.toList());

assertThat(result,equalTo(Arrays.asList("1!!","100!!","200!!","300!!","2!!","3!!")));

}
</pre>
@param pos to insert data at
@param values to insert
@return Stream with new data inserted