I think the test case used here is unfair to RxJava, which was conceptually designed to react to events emitted over a stream. Similar test could be written in a way where
1. You have one observable which will emit numbers from 1 to TEST_ITERATIONS_COUNT.
2. Chain the two operations on that.
Here I believe RxJava will perform equivalent. But again I agee with your claim that a typical operation in Android app is to call and api and process the output (Single?), there certainly coroutine will win simply because coroutines are lighter weight than thread.