-1

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

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";
4

2 回答 2

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");
于 2019-10-07T09:42:23.240 回答
0

使用StreamEx,您可以有效地加入mapfilter

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");

或者用简单的Streamand 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");
于 2019-10-07T11:57:12.857 回答