· 9 years ago · Aug 26, 2016, 11:10 AM
1 public static <R, T> Func1<T, Observable<R>> memoizeAndCache(Func1<T, Observable<R>> builder) {
2 Map<T, Observable<R>> map = new HashMap<>();
3 return r -> map.computeIfAbsent(r, r2 -> builder.call(r2).cache());
4 }
5
6 private Observable<OauthToken> getValidTokenToContext(Map<Parameter, Object> context) {
7 OauthToken token = (OauthToken) context.get(Parameter.TOKEN);
8 if (isValidToken(Optional.ofNullable(token))) {
9 return Observable.just(token);
10 }
11 Func1<Map<Parameter, Object>, Observable<OauthToken>> cache = memoizeAndCache(this::getToken);
12 return cache.call(context)
13 .doOnNext(t -> context.put(Parameter.TOKEN, t));