以下代码以命令式风格直观。尝试以声明式方式进行相同操作会使其变得更复杂吗?
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";
答案 0 :(得分:1)
您应该寻找第一个无效的条目。如果找不到,则所有条目均有效。如果发现无效条目,请检查密钥是否无效或值无效。
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");
答案 1 :(得分:0)
使用StreamEx
,您可以有效地加入map
和filter
:
return EntryStream.of(map).mapKeyValuePartial((key, value) -> {
if (key.length() > 10) {
return Optional.of("invalid_key");
} else if (value.length() > 10) {
return Optional.of("invalid_value");
} else {
return Optional.empty();
}).findFirst().orElse("all_valid");
或者使用普通的Stream
和null
:
return map.entrySet().stream().map(entry -> {
if (entry.getKey().length() > 10) {
return "invalid_key";
} else if (entry.getValue().length() > 10) {
return "invalid_value";
} else {
return null;
}).filter(x -> x != null).findFirst().orElse("all_valid");