public <T> IFuture<T> thenCompose(final Function<? super E, IFuture<T>> function, Class<?> futuretype) { final Future<T> ret = getFuture(futuretype); this.addResultListener(new ExceptionDelegationResultListener<E, T>(ret) { public void customResultAvailable(E result) { IFuture<T> res = function.apply(result); res.addResultListener(SResultListener.delegate(ret)); } }); return ret; }
public IFuture<Void> thenAccept(final Consumer<? super E> consumer, Class<?> futuretype) { final Future<Void> ret = getFuture(futuretype); this.addResultListener(new ExceptionDelegationResultListener<E, Void>(ret) { public void customResultAvailable(E result) { consumer.accept(result); ret.setResult(null); } }); return ret; }
public <T> IFuture<T> thenApply(final Function<? super E, ? extends T> function, Class<?> futuretype) { final Future<T> ret = getFuture(futuretype); this.addResultListener(new ExceptionDelegationResultListener<E, T>(ret) { public void customResultAvailable(E result) { T res = function.apply(result); ret.setResult(res); } }); return ret; }
public <U,V> IFuture<V> thenCombine(final IFuture<U> other, final BiFunction<? super E,? super U, ? extends V> function, Class<?> futuretype) { final Future<V> ret = getFuture(futuretype); this.addResultListener(new ExceptionDelegationResultListener<E, V>(ret) { public void customResultAvailable(final E e) { other.addResultListener(new ExceptionDelegationResultListener<U, V>(ret) { public void customResultAvailable(U u) { ret.setResult(function.apply(e, u)); } }); } }); return ret; }
final Future<U> ret = getFuture(futuretype); IResultListener<E> listener = new IResultListener<E>()
final Future<Void> ret = getFuture(futuretype); IResultListener<E> listener = new IResultListener<E>()