Many code changes in 3.x can be done independently, but updating the new What's Different in 3.x.md would conflict. This issue tracks which changes should be eventually described in the file:
Supplier interface -> #6511Callable use changed to Supplier in the API -> #6511 getValues() from various subjects and processors -> #6516Maybe.defaultIfEmpty() returns Single -> #6517Maybe.toSingle(T) -> #6517Flowable.subscribe(4 args) -> #6517Observable.subscribe(4 args) -> #6517Single.toCompletable() -> #6517Completable.blockingGet() -> #6517ConnectableX redesign. -> #6519startWith+1 to startWithItem & startWithIterable -> #6530replay() with eagerTruncate option -> #6532replay(Scheduler) and its variants. -> #6539using() order of upstream dispose and resource dispose -> #6534concatMap with Scheduler -> #6538deserialize() -> #6539onExceptionResumeNext()buffer(Supplier) and window(Supplier) variants.onErrorResumeNext(source) to onErrorResumeWith. -> #6551XOnSubscribe interfaces. -> #6579combineLatest(vararg) & combineLatestDelayError(vararg) -> #6635zip(O(O)) overload -> #6638zipIterable to zip -> #6638concatMapDelayError and concatMapEagerDelayError -> #6638combineLatestArray -> #6640 groupBy abandoned group behavior change -> #6642Flowable.groupBy signaling MissingBackpressureException instead of possibly hanging -> #6740 Schedulers.from(Executor) -> #6744DisposableContainer public API -> #6745CompositeException::getCause() output and message -> #6748window handling abandoned inner windows -> #6758, #6761, #6762Disposables utility class inlined into Disposable -> #6781BehaviorProcessor, PublishProcessor and MulticastProcessor offer null-check change. -> #6799MulticastProcessor.offer now throws IllegalStateException when called in fusion mode. -> #6799blockingForEach(Consumer, int) overloads -> #6800fromFuture(..., Scheduler) overloads -> #6814IndexOutOfBoundsException (skipLast, takeLast, takeLastTimed) now throw IllegalArgumentException for param validation.skip(count) now throws IAE if count < 0Observable.concatMapIterable(Function, int) overload -> #6837combineLatestDelayError(array) to combineLatestArrayDelayError(array) -> #6838Single.equals to Single.sequenceEqualFlowable.buffer(openingIndicator) overloads -> #6858blockingSubscribe across -> #6862Maybe.delayError(..., delayError) overload -> #6864 onErrorComplete across -> #6867 onErrorResumeWith across -> #6868 retryUntil -> #6869switchOnNext[DelayError] to M/S/C -> #6870Maybe.dematerialize -> #6871fromAction, fromRunnable, fromMaybe, fromSingle, fromPublisher, fromObservable -> #6873fromAction and fromRunnable to not execute if cancelled upfront. -> #6873timeInterval and timestamp to M/S -> #6874toFuture to M/C ->#6875ofType to M/S -> #6876doOnLifecycle to M/S/C -> #6877concatMapX missing across -> #6879concatMapXDelayError missing across -> #6881Single.mergeArrayX -> #6882 Completable.sequenceEqual -> #6884startWith missing across -> #6885Completable.onErrorReturn[Item] -> #6886safeSubscribe to M/S/C -> #6887Maybe.flatMapSingle and Maybe.flatMapSingleElement -> #6891Single.flatMap(F, F) and Single.flatMap(F, Bi) operators -> #6893concatEager(Iterator, int) and concatEagerDelayError across -> #6899as() into to() -> #6514Why was TestObserver#assertNotTerminated removed? That's a useful API IMO
The poll indicated only a few people were using it. Replace it with assertNoErrors().assertNotComplete().
I've written most of the wiki page about the changes.
https://github.com/ReactiveX/RxJava/wiki/What's-different-in-3.0
Still a few dozen new operators are not yet written from this list and from #6776.
Let me know if I've forgotten something else.
Done.
Most helpful comment
The poll indicated only a few people were using it. Replace it with
assertNoErrors().assertNotComplete().