当前位置: 首页 > 知识库问答 >
问题:

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

拓拔弘亮
2023-03-14

我怎么能做到这一点Java8 Lambdas:

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

共有3个答案

谷梁子昂
2023-03-14

根据这个问题,可选类型在Java8可选中的有效使用在这里不是一个好的选择,尽管技术上是可能的。

您可以使用StringUtils重写到更好的版本:

final String code = getCodeFromSomething();
if (accountType.requiresCode() && StringUtils.isEmpty(code)) {
    new IllegalArgumentException("Account type " + accountType + " requires code");
}
赏逸春
2023-03-14

你可以用

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

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

柳奇思
2023-03-14

您可以将代码重写为

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

或者,假设你的空(code.get())实际上是代码。get()。isEmpty()

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

但它并没有真正增加易读性。Lambdas并不总是比普通代码更好。

 类似资料:
  • 问题内容: 我正在使用JPA 2.0 /hibernate验证来验证我的模型。我现在遇到一种情况,必须验证两个字段的组合: 该模型是无效的,如果都和都null和其他有效。 如何使用JPA 2.0 / Hibernate执行这种验证?使用简单的注释,两个吸气剂都必须为非null才能通过验证。 问题答案: 对于多属性验证,应使用类级别的约束。摘自 Bean Validation Sneak Peek第

  • 我有下面的代码 我希望验证这是否是HTML的正确格式,因为它包含许多变量,如果出现问题,很难进行调试。

  • 我有两个数字字段来收集用户的数据。需要使用codeigniter表单验证类对其进行验证。 条件: 第一个字段可以为零 第二字段不能为零 第一字段不应等于第二字段 第二字段应大于第一字段 目前我使用 美元这个- 美元这个- 但是,如何验证上述第3和第4个条件? 提前谢谢。

  • 问题内容: 假设我有一个带有两个我不在乎的方法的类,这称为… 下面的两个(仍然来自我的应用程序中的另一个类)都应该通过我的测试: 我不在乎哪个被调用,我只想调用两个变体之一。 在Mockito中,我通常可以执行以下操作: 要么: 是否有一种本地方式说“验证 一个或另一个 至少发生一次”? 还是我必须做一些粗略的事情: 问题答案: 您可以结合使用:

  • 我在应用程序中配置了两个身份验证提供程序,一个使用LDAP,另一个查看数据库: Spring首先尝试使用LDAP,如果它在那里找不到用户,它会尝试我的自定义提供程序。 我想做的是强制Spring在所有可用的提供者中对用户进行身份验证。在这种情况下,它只会尝试我的自定义提供程序,前提是它可以先在LDAP服务器中执行登录。如果自定义提供程序中的身份验证失败,则整个身份验证将失败。 有可能通过Sprin

  • 问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做: