@Override public Observable<Server> resolve() { return refreshServerCache().concatMap(new Func1<List<Server>, Observable<? extends Server>>() { @Override public Observable<? extends Server> call(List<Server> servers) { if (servers.isEmpty()) { return Observable.error(SERVER_CACHE_EMPTY_EXCEPTION); } int currentPos = Math.abs(positionRef.getAndIncrement()); Server toReturn = servers.get(currentPos % servers.size()); return Observable.just(toReturn); } }); }