在HashMap中使用ComputeIfAbsent

时间:2018-09-12 15:16:39

标签: java java-8 hashmap

我已经阅读过类似的文章,但这是使用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条件(我猜代码审查者对这本书Clean Code的重视程度过高)

1 个答案:

答案 0 :(得分:2)

如果responsescookieMap是两个不同的数据源,则您的代码段是正确的。唯一需要注意的是调用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
});
相关问题