Я знаю, как запомнить один объект . Тем не менее, я хотел бы отметить, только если выполняется какое-то условие. Я звоню в службу, которая иногда возвращает неуспешный ответ. Я хотел бы отметить, только если ответ службы в случае успеха.
MyResponse myResponse = myService.call()
boolean success = myResponse.isSuccessful();
И мой кеш создается так:
private Supplier<MyResponse> cache;
private void createCache() {
this.cache = Suppliers
.memoizeWithExpiration(myService::call, timeout,
TimeUnit.MINUTES);
}
Вопрос: Можно ли каким-либо образом кешировать ответ только в том случае, если ответ был успешным с использованием поставщика, переданного методу memoizeWithExpiration
?
Единственный обходной путьЯ обнаружил, что это делается для того, чтобы при получении значения сначала вызвать cache.get()
, проверить, успешно ли хранится в кэше объект, а если нет, снова вызвать createCache()
, чтобы очистить его, а затем снова получить значение. Таким образом, если последующий вызов службы вернет действительный объект, он будет сохранен, а если нет, каждый последующий вызов очистит кэш и снова вызовет службу.
public MyResponse getResponse() {
MyResponse myResponse = cache.get();
if (myResponse.isSuccess()) {
return myResponse;
} else {
createCache();
return cache.get();
}
}
Однако в этом решении, есликэш-память пуста, и служба возвращает неуспешный ответ, она немедленно будет вызвана снова.