ReactiveX es un framework para los lenguajes de programación más utilizados: Java, JavaScript, C#, Scala, Clojure, C ++, Ruby, Python, Groovy, JRuby, Kotlin, Swift y más.
RxJava es un framwork que implementa los conceptos de ReactiveX en Java. Veamos un ejemplo RxJava:
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5);
Observable.from(input).filter(new Func1() {
@Override
public Boolean call(Integer x) {
return x % 2 == 0;
}
})
o usando lambda :
Observable.from(input).filter(x -> x % 2 == 0);
- El productor puede notificar al consumidor que no hay más datos disponible.
- El productor puede notificar al consumidor que ha ocurrido un error.
La biblioteca RxJava se creó en Netflix como una alternativa más inteligente a Java Futures y devoluciones de llamada. Tanto los futuros como las devoluciones de llamada son fáciles de usar cuando solo hay un nivel de ejecución asincrónica, pero son difíciles de administrar cuando están anidados.
El siguiente ejemplo muestra cómo se maneja el problema de las devoluciones de llamada anidadas en RxJava.
Suponga que necesita llamar a una API remota para autenticar a un usuario, luego a otra para obtener los datos del usuario y a otra API para obtener los contactos de un usuario. Normalmente, tendría que escribir llamadas a API anidadas y hacer complejos callbacks. Pero con RxJava se puede hacer así :
serviceEndpoint.login().doOnNext(accessToken -> storeCredentials(accessToken)).flatMap(accessToken -> serviceEndpoint.getUser()).flatMap(user -> serviceEndpoint.getUserContact(user.getId()))