RxJava: Cómo aplicar operadores condicionalmente a un observable sin romper la cadena

Tengo una cadena de operadores en un RxJava observable. Me gustaría poder aplicar uno de dos operadores dependiendo de un valor booleano sin "romper la cadena".

Soy relativamente nuevo en Rx (Java) y siento que probablemente haya una forma más idiomática y legible de hacerlo que mi enfoque actual de introducir una variable temporal.

Aquí hay un ejemplo concreto, almacenando elementos de un observable si un campo de tamaño de lote no es nulo, de lo contrario, emite un solo lote de tamaño ilimitado contoList():

Observable<Item> source = Observable.from(newItems);
Observable<List<Item>> batchedSource = batchSize == null ?
                source.toList() :
                source.buffer(batchSize);
return batchedSource.flatMap(...).map(...)

¿Es posible algo así? (pseudo-lambdas porque Java):

Observable.from(newItems)
    .applyIf(batchSize == null,
             { o.toList() },
             { o.buffer(batchSize) })
    .flatMap(...).map(...)

Respuestas a la pregunta(1)

Su respuesta a la pregunta