nl_tokens: Returns a stream in which each element is the result of passing the corresponding elementY of each of { @code streamA } and { @code streamB } to { @code function } .
pl_tokens: @ Beta public static < A , B , R > Stream < R > zip ( Stream < A > streamA , Stream < B > streamB , BiFunction < ? super A , ? super B , R > function ) { checkNotNull ( streamA ) ; checkNotNull ( streamB ) ; checkNotNull ( function ) ; boolean isParallel = streamA . isParallel ( ) || streamB . isParallel ( ) ; // same as Stream.concat Spliterator < A > splitrA = streamA . spliterator ( ) ; Spliterator < B > splitrB = streamB . spliterator ( ) ; int characteristics = splitrA . characteristics ( ) & splitrB . characteristics ( ) & ( Spliterator . SIZED | Spliterator . ORDERED ) ; Iterator < A > itrA = Spliterators . iterator ( splitrA ) ; Iterator < B > itrB = Spliterators . iterator ( splitrB ) ; return StreamSupport . stream ( new AbstractSpliterator < R > ( Math . <mask> ( splitrA . estimateSize ( ) , splitrB . estimateSize ( ) ) , characteristics ) { @ Override public boolean tryAdvance ( Consumer < ? super R > action ) { if ( itrA . hasNext ( ) && itrB . hasNext ( ) ) { action . accept ( function . apply ( itrA . next ( ) , itrB . next ( ) ) ) ; return true ; } return false ; } } , isParallel ) . onClose ( streamA :: close ) . onClose ( streamB :: close ) ; }