¿Puedes dividir una secuencia en dos corrientes?

Tengo un conjunto de datos representado por un flujo de Java 8:

Stream<T> stream = ...;

Puedo ver cómo filtrarlo para obtener un subconjunto aleatorio, por ejemplo

Random r = new Random();
PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator();   
Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0));

También puedo ver cómo podría reducir este flujo para obtener, por ejemplo, dos listas que representan dos mitades aleatorias del conjunto de datos, y luego convertirlas de nuevo en flujos. Pero, ¿hay una manera directa de generar dos flujos desde el inicial? Algo como

(heads, tails) = stream.[some kind of split based on filter]

Gracias por cualquier idea

Respuestas a la pregunta(9)

Su respuesta a la pregunta