【问题标题】:Lambda expressions "Not" predicateLambda 表达式“非”谓词
【发布时间】:2020-08-03 07:44:23
【问题描述】:

我目前正在学习 Kotlin 并希望成为一名开发人员,但我遇到了一个问题,无法找出答案(即使经过大量的谷歌研究)。

如果有人可以帮助我并解释他们的解决方案,我们将不胜感激。 :)

提前谢谢你!

问题:

“编写一个接受 originalPredicate: (Char) -> 布尔变量并返回否定结果的谓词。您的谓词是过滤字符串。”

实施: val notPredicate: (Char) -> Boolean = TODO("提供实现")

【问题讨论】:

  • 还请发布您迄今为止尝试过的内容。堆栈溢出是为了帮助您自己努力。

标签: kotlin lambda predicate


【解决方案1】:

所以,让我们先了解一下问题。

你给了originalPredicate: (Char) -> Boolean,所以它会根据字符返回一个布尔值。例如,如果它会为 'a'、'c'、'e' 等返回 true(只是一个示例),那么您必须为它们返回 false,并且为 'b'、'd'、'f 返回 true '等。

所以,你想调用originalPredicate,知道结果(即真或假)然后反转结果然后返回。

val notPredicate: (Char) -> Boolean = { char ->
    val booleanValue = originalPredicate(char)
    return@notPredicate !booleanValue
}

如果您简化步骤,并使用 it 这是 lambda 中变量的默认名称,并且由于 lambda 中的最后一条语句是自行返回的(因此您不必编写显式返回):

val notPredicate: (Char) -> Boolean = { !originalPredicate(it) }

【讨论】:

  • 非常感谢!也是为了这样解释!我想多了,这真的很有帮助
【解决方案2】:

你是这个意思吗:

val originalPred :(Char) -> Boolean =  {it>'a'}
val somePred :(Char) -> Boolean =  {!originalPred.invoke(it)}

注意,it>'a' 只是一个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多