Использование ComputeIfAbsent в HashMap - PullRequest
0 голосов
/ 12 сентября 2018

Я читал похожие посты по этому вопросу, но это правильный способ использовать функцию computeIfAbsent? cookieMap - это HashMap, а отклики - это объект, который содержит все заголовки, файлы cookie, ответы, код состояния и т. д. *

cookieMap.computeIfAbsent("Varlink", varLink -> {
  if (responses.getCookie("VARLINK").length() < 1) {
    throw new ProviderException("Varlink not present in response, check response status!!!");
  }
  return responses.getCookie("VARLINK");
});

Мне нужно добавить несколько таких ключей в cookieMap. Моей первоначальной мыслью было поместить все в условие If, но из-за определенных ограничений у нас не должно быть вложенных условий if-else (я полагаю, рецензент кода слишком серьезно отнесся к книге «Чистый код»)

1 Ответ

0 голосов
/ 13 сентября 2018

Если responses и cookieMap являются двумя различными источниками данных, то ваш фрагмент верен. Единственная проблема - вызвать cookieMap::getCookie дважды, что может быть решено с помощью переменной, как кто-то предложил в комментариях.

Я бы сократил все выражение, используя Optional до:

cookieMap.computeIfAbsent("Varlink", v -> {
    Optional.of(respones.getCookie("VARLINK"))                // Gets a cookie
            .filter(c -> c.length() >= 1)                     // Filters the length
            .orElseThrow(() -> new ProviderException("...")); // Returns only if present
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...