首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComputeIfAbsent在HashMap中的应用

ComputeIfAbsent在HashMap中的应用
EN

Stack Overflow用户
提问于 2018-09-12 15:16:39
回答 1查看 901关注 0票数 2

我读过类似的文章,但这是使用computeIfAbsent函数的正确方式吗?cookieMap是一个HashMap,responses是一个包含所有头、cookie、响应、状态代码等的对象。

代码语言:javascript
复制
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-否则的条件(我想代码审查员对“干净代码”一书太重视了)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 22:01:00

如果responsescookieMap是两个不同的数据源,那么您的代码片段是正确的。唯一需要考虑的是调用cookieMap::getCookie两次,这可能会像有人在注释中建议的那样使用变量来解决。

我会使用Optional将整个表达式缩短为:

代码语言:javascript
复制
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
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52298528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档