RxJava: como aplicar condicionalmente operadores a um observável sem quebrar a cadeia

Eu tenho uma cadeia de operadores em um observável RxJava. Eu gostaria de poder aplicar um dos dois operadores, dependendo de um valor booleano sem "quebrar a cadeia".

Sou relativamente novo em Rx (Java) e sinto que provavelmente há uma maneira mais idiomática e legível de fazer isso do que minha abordagem atual de introdução de uma variável temporária.

Aqui está um exemplo concreto, armazenando em buffer itens de um observável se um campo de tamanho de lote não for nulo, emitindo um único lote de tamanho ilimitado comtoList():

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

É algo assim possível? (pseudo-lambdas porque Java):

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

questionAnswers(1)

yourAnswerToTheQuestion