首页 > 解决方案 > 如果有多个间歇性中断/返回,声明式风格会失败吗?

问题描述

下面的代码在命令式风格中很直观。尝试以声明式风格做同样的事情会使其更复杂吗?

for (var entry : map.entrySet()) {
    if (entry.getKey().length() > 10) {
        return "invalid_key";
    } else if (entry.getValue().length() > 10) {
        return "invalid_value";
    } else if (entry.getKey().isEmpty()) {
        return "empty_key";
    } else if (entry.getValue().isEmpty()) {
        return "empty_value";
    }
}
return "all_valid";

标签: javafunctional-programmingjava-streamvavr

解决方案


您应该查找第一个无效条目。如果没有找到,则所有条目都是有效的。如果发现无效条目,则检查键是否无效或值无效。

return map.entrySet()
          .stream()
          .filter(entry -> entry.getKey().length() > 10 || entry.getValue().length() > 10)
          .findFirst()
          .map(entry -> entry.getKey().length() > 10 ? "invalid_key" : "invalid_value")
          .orElse("all_valid");

推荐阅读