java - 如果有多个间歇性中断/返回,声明式风格会失败吗?
问题描述
下面的代码在命令式风格中很直观。尝试以声明式风格做同样的事情会使其更复杂吗?
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";
解决方案
您应该查找第一个无效条目。如果没有找到,则所有条目都是有效的。如果发现无效条目,则检查键是否无效或值无效。
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");
推荐阅读
- c# - 使用 Access 数据库的实体框架查询 DaysOfWeek
- html - 子节点是否从 :root 继承字体大小?
- javascript - React Date Picker color effect on hover and set date range
- twitter-bootstrap - Bootstrap 4 - w-100 不适合父 flex div ...如果小于父 div?
- kdb - kdb仪表板中的参数化查询
- ansible - 错误!此任务“import_playbook”有额外的参数,仅在以下模块中允许
- python - Python:位数组到整数:使用 NumPy 数组随机获取负整数
- mysql - 如何在 mySQL 的触发器中使用 select..into 语句
- python - Keras 加载的模型没有相同的精度
- node.js - 收到错误“原因:java.lang.Exception: internal/modules/cjs/loader.js:983 throw err; ^Error: Cannot find module 'react-native/cli'”#1121