я не знаю как прерывать верхний поток, за исключением наличия exception из него. Поэтому предлагаю так. data.concatMap(v -> { if(v == -1) { return Observable.error(new MyError(v)); } .... }).onErrorResumNext(error -> { if(error.v == -1) {
} }....
А если еррор вернуть, то в onError сабскрайбера попадет?