我已经阅读过类似的文章,但这是使用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的重视程度过高)
答案 0 :(得分:2)
如果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
});