我读过类似的文章,但这是使用computeIfAbsent函数的正确方式吗?cookieMap是一个HashMap,responses是一个包含所有头、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-否则的条件(我想代码审查员对“干净代码”一书太重视了)
发布于 2018-09-12 22:01:00
如果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
});https://stackoverflow.com/questions/52298528
复制相似问题