RxKotlin is a lightweight library that adds convenient extension functions to RxJava. You can use RxJava with Kotlin out-of-the-box, but Kotlin has language features (such as extension functions) that can streamline usage of RxJava even more. RxKotlin aims to conservatively collect these conveniences in one centralized library, and standardize conventions for using RxJava with Kotlin.
importio.reactivex.rxjava3.kotlin.subscribeByimportio.reactivex.rxjava3.kotlin.toObservablefunmain() {
val list =listOf("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
list.toObservable() // extension function for Iterables
.filter { it.length >=5 }
.subscribeBy( // named arguments for lambda Subscribers
onNext = { println(it) },
onError = { it.printStackTrace() },
onComplete = { println("Done!") }
)
}
Contributing
Since Kotlin makes it easy to implement extensions for anything and everything, this project has to be conservative in what features are in scope. Intentions to create syntactic sugar can quickly regress into syntactic saccharin, and such personal preferences belong in one's internal domain rather than an OSS library.
Here are some basic guidelines to determine whether your contribution might be in scope for RxKotlin:
Is this intended feature already in RxJava?
If no, propose the operator in RxJava.
If yes, can Kotlin streamline the operator further?
Does this substantially reduce the amount of boilerplate code?
Does this make an existing operator easier to use?
Does RxJava not contain this feature due to Java language limitations, or because of a deliberate decision to not include it?
The 2.x version of RxJava and RxKotlin is in maintenance mode and will be supported only through bugfixes. No new features or behavior changes will be accepted or applied.
Use RxKotlin 1.x versions to target RxJava 1.x.
The 1.x version of RxJava and RxKotlin reached end-of-life. No further development, support, maintenance, PRs or updates will happen.
The maintainers do not update the RxJava dependency version for every minor or patch RxJava release, so you should explicitly add the desired RxJava dependency version to your pom.xml or build.gradle(.kts).
Binaries
Binaries and dependency information for Maven, Ivy, Gradle and others can be found at http://search.maven.org.
Learn more about building this project with JitPack here.
Extensions
Target Type
Method
Return Type
Description
BooleanArray
toObservable()
Observable
Turns a Boolean array into an Observable
ByteArray
toObservable()
Observable
Turns a Byte array into an Observable
ShortArray
toObservable()
Observable
Turns a Short array into an Observable
IntArray
toObservable()
Observable
Turns an Int array into an Observable
LongArray
toObservable()
Observable
Turns a Long array into an Observable
FloatArray
toObservable()
Observable
Turns a Float array into an Observable
DoubleArray
toObservable()
Observable
Turns a Double array into an Observable
Array
toObservable()
Observable
Turns a T array into an Observable
IntProgression
toObservable()
Observable
Turns an IntProgression into an Observable
Iterable
toObservable()
Observable
Turns an Iterable<T> into an Observable
Iterator
toObservable()
Observable
Turns an Iterator<T> into an Observable
Observable
flatMapSequence()
Observable
Flat maps each T emission to a Sequence<R>
Observable<Pair<A,B>>
toMap()
Single<Map<A,B>>
Collects Pair<A,B> emissions into a Map<A,B>
Observable<Pair<A,B>>
toMultimap()
Single<Map<A, List<B>>
Collects Pair<A,B> emissions into a Map<A,List<B>>
Observable<Observable>
mergeAll()
Observable
Merges all Observables emitted from an Observable
Observable<Observable>
concatAll()
Observable
Concatenates all Observables emitted from an Observable
Observable<Observable>
switchLatest()
Observable
Emits from the last emitted Observable
Observable<*>
cast()
Observable
Casts all emissions to the reified type
Observable<*>
ofType()
Observable
Filters all emissions to only the reified type
Iterable<Observable>
merge()
Observable
Merges an Iterable of Observables into a single Observable
Iterable<Observable>
mergeDelayError()
Observable
Merges an Iterable of Observables into a single Observable, but delays any error
BooleanArray
toFlowable()
Flowable
Turns a Boolean array into an Flowable
ByteArray
toFlowable()
Flowable
Turns a Byte array into an Flowable
ShortArray
toFlowable()
Flowable
Turns a Short array into an Flowable
IntArray
toFlowable()
Flowable
Turns an Int array into an Flowable
LongArray
toFlowable()
Flowable
Turns a Long array into an Flowable
FloatArray
toFlowable()
Flowable
Turns a Float array into an Flowable
DoubleArray
toFlowable()
Flowable
Turns a Double array into an Flowable
Array
toFlowable()
Flowable
Turns a T array into an Flowable
IntProgression
toFlowable()
Flowable
Turns an IntProgression into an Flowable
Iterable
toFlowable()
Flowable
Turns an Iterable<T> into an Flowable
Iterator
toFlowable()
Flowable
Turns an Iterator<T> into an Flowable
Flowable
flatMapSequence()
Flowable
Flat maps each T emission to a Sequence<R>
Flowable<Pair<A,B>>
toMap()
Single<Map<A,B>>
Collects Pair<A,B> emissions into a Map<A,B>
Flowable<Pair<A,B>>
toMultimap()
Single<Map<A, List<B>>>
Collects Pair<A,B> emissions into a Map<A,List<B>>
Flowable<Flowable>
mergeAll()
Flowable
Merges all Flowables emitted from an Flowable
Flowable<Flowable>
concatAll()
Flowable
Concatenates all Flowables emitted from an Flowable
Flowable<Flowable>
switchLatest()
Flowable
Emits from the last emitted Flowable
Flowable
cast()
Flowable
Casts all emissions to the reified type
Flowable
ofType()
Flowable
Filters all emissions to only the reified type
Iterable<Flowable>
merge()
Flowable
Merges an Iterable of Flowables into a single Flowable
Iterable<Flowable>
mergeDelayError()
Flowable
Merges an Iterable of Flowables into a single Flowable, but delays any error
Single
cast()
Single
Casts all emissions to the reified type
Observable<Single>
mergeAllSingles()
Observable
Merges all Singles emitted from an Observable
Flowable<Single>
mergeAllSingles()
Flowable
Merges all Singles emitted from a Flowable
Maybe
cast()
Maybe
Casts any emissions to the reified type
Maybe
ofType()
Maybe
Filters any emission that is the reified type
Observable<Maybe>
mergeAllMaybes()
Observable
Merges all emitted Maybes
Flowable<Maybe>
mergeAllMaybes()
Flowable
Merges all emitted Maybes
Action
toCompletable()
Completable
Turns an Action into a Completable
Callable
toCompletable()
Completable
Turns a Callable into a Completable
Future
toCompletable()
Completable
Turns a Future into a Completable
(() -> Any)
toCompletable()
Completable
Turns a (() -> Any) into a Completable
Observable
mergeAllCompletables()
Completable>
Merges all emitted Completables
Flowable
mergeAllCompletables()
Completable
Merges all emitted Completables
Observable
subscribeBy()
Disposable
Allows named arguments to construct an Observer
Flowable
subscribeBy()
Disposable
Allows named arguments to construct a Subscriber
Single
subscribeBy()
Disposable
Allows named arguments to construct a SingleObserver
Maybe
subscribeBy()
Disposable
Allows named arguments to construct a MaybeObserver
Completable
subscribeBy()
Disposable
Allows named arguments to construct a CompletableObserver
Observable
blockingSubscribeBy()
Unit
Allows named arguments to construct a blocking Observer
Flowable
blockingSubscribeBy()
Unit
Allows named arguments to construct a blocking Subscriber
Single
blockingSubscribeBy()
Unit
Allows named arguments to construct a blocking SingleObserver
Maybe
blockingSubscribeBy()
Unit
Allows named arguments to construct a blocking MaybeObserver
Completable
blockingSubscribeBy()
Unit
Allows named arguments to construct a blocking CompletableObserver
Disposable
addTo()
Disposable
Adds a Disposable to the specified CompositeDisposable
CompositeDisposable
plusAssign()
Disposable
Operator function to add a Disposable to thisCompositeDisposable
SAM Helpers (made obsolete since Kotlin 1.4)
These methods have been made obsolete with new type inference algorithm in Kotlin 1.4.
They will be removed in some future RxKotlin version.
To help cope with the SAM ambiguity issue when using RxJava with Kotlin, there are a number of helper factories and extension functions to workaround the affected operators.
RxKotlin can be used in conjunction with other Rx and Kotlin libraries, such as RxAndroid, RxBinding, and TornadoFX/RxKotlinFX. These libraries and RxKotlin are modular, and RxKotlin is merely a set of extension functions to RxJava that can be used with these other libraries. There should be no overlap or dependency issues.
Other Resources
Learning RxJava Packt Book
Chapter 12 of Learning RxJava covers RxKotlin and Kotlin idioms with RxJava.
Reactive Programming in Kotlin Packt Book
The book Reactive Programming in Kotlin mainly focuses on RxKotlin, as well as learning reactive programming with Kotlin.
请发表评论