如何使用 Java 8 Lambda 验证两个变量

How can I validate two variables with Java 8 Lambda

如何使用 Java 8 Lambdas 执行此操作:

Optional<String> code;
if (accountType.requiresCode() && (!code.isPresent() || empty(code.get()))) {
    new IllegalArgumentException("Account type " + accountType + " requires code");
}

你可以使用

if (accountType.requiresCode() && code.map(this::empty).orElse(true))

但我不确定它是否使代码更具可读性。

可以将代码重写为

Optional<String> code;
if (accountType.requiresCode()) code.filter(x->!empty(x)).orElseThrow(
  () -> new IllegalArgumentException("Account type " + accountType + " requires code")
);

或者,假设您的 empty(code.get()) 实际上意味着 code.get().isEmpty():

Optional<String> code=Optional.empty();
if (accountType.requiresCode()) code.filter(x->!x.isEmpty()).orElseThrow(
  () -> new IllegalArgumentException("Account type " + accountType + " requires code")
);

但这并没有真正增加可读性。 Lambda 并不总是比普通代码好。

根据这个问题 可选在这里不是一个好的选择,尽管在技术上是可行的。

您可以使用 StringUtils 重写得更好:

final String code = getCodeFromSomething();
if (accountType.requiresCode() && StringUtils.isEmpty(code)) {
    new IllegalArgumentException("Account type " + accountType + " requires code");
}