Snippets

Kenneth Jorgensen Converting between RxJava and CompletableFuture

Created by Kenneth Jorgensen
import io.reactivex.Completable;
import io.reactivex.Maybe;
import io.reactivex.Single;
import io.reactivex.disposables.Disposable;

import java.util.concurrent.CompletableFuture;

public class RxUtil {
	public static <T> Single<T> toSingle(CompletableFuture<T> future) {
		return Single.create(subscriber -> {
			future.thenAccept(result -> {
				subscriber.onSuccess(result);
			})
				.exceptionally(e -> {
					subscriber.onError(e);
					return null;
				});
		});
	}

	public static <T> Maybe<T> toMaybe(CompletableFuture<T> future) {
		return toSingle(future).toMaybe();
	}

	public static Completable toCompletable(CompletableFuture<?> future) {
		return Completable.create(subscriber -> {
			future.thenAccept(ignore -> {
				subscriber.onComplete();
			})
				.exceptionally(e -> {
					subscriber.onError(e);
					return null;
				});
		});
	}

	public static CompletableFuture<Void> toCompletableFuture(Completable completable) {
		CompletableFuture<Void> future = new CompletableFuture<>();
		final Disposable disposable = completable.subscribe(
			() -> future.complete(null),
			future::completeExceptionally
		);
		return future
			.thenAccept(ignore -> disposable.dispose());
	}
}

Comments (1)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.