kotlin - 如何简化 Kotlin 中的谓词链

标签 kotlin boolean predicate chain

我有一串谓词从句,像这样

student?.firstName?.equals("John") ?: false &&
student?.lastName?.equals("Smith") ?: false &&
student?.age?.equals(20) ?: false &&
student?.homeAddress?.equals("45 Boot Terrace") ?: false &&
student?.cellPhone?.startsWith("123456") ?: false

我发现代替 && 可以切换到 boolean 谓词 and() ,但总的来说它并没有使代码更简洁。

Kotlin 有没有办法简化这种表达方式?

最佳答案

感谢所有参与的人!这是带有注释的代码的最终版本:

student?.run {
  firstName == "John" &&
  lastName == "Smith" &&
  age == 20 &&
  homeAddress == "45 Boot Terrace" &&
  cellPhone.orEmpty().startsWith("123456")
} ?: false
  • 作用域函数 run {} 在对象 student
  • 上被调用
  • equals 替换为 == 以比较 boolean 值和 null
  • 作用域函数的返回类型可以为空,因此使用 elvis 运算符 ?: false 。另一种选择是使用 == true ,但这是您的个人喜好
  • 关于kotlin - 如何简化 Kotlin 中的谓词链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914472/

    相关文章:

    Kotlin 数据类可选变量

    linux - 检查文件是否存在 bash 不工作

    c++ - 排序谓词的链接(例如,对于 std::sort)

    android - 对Kotlin协程感到困惑

    android - "callback(value)"和 "callback.invoke(value)"有什么区别?

    python - 什么会阻止过滤器返回 0?

    c# - 如何在 linq 中使用 sql 查询更新列数据?

    sql - 在内连接条件之前过滤表

    drop-down-menu - Vaadin 8 NativeSelect更改列表的数据表示形式

    Python 等价于 Perl 的习语 do this or that,通常称为 "or die"?