ZetCode

Kotlin 谓词

最后修改于 2024 年 1 月 29 日

本文介绍了如何在 Kotlin 中使用谓词。

谓词

谓词通常是指关于某事物的陈述,要么为真,要么为假。在编程中,谓词代表返回布尔值的单个参数函数。

Kotlin 谓词示例

以下示例创建了一个简单的 Kotlin 谓词。

main.kt
fun main() {

    val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

    val r = vals.find { e -> isNegative(e) }
    println(r)
}

fun isNegative(e: Int): Boolean {

    return e < 0
}

在这个例子中,谓词用于过滤掉正值。

val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

我们有一个整数值列表。

val r = vals.find { e -> isNegative(e) }

find 函数返回与给定谓词匹配的第一个元素,如果未找到这样的元素,则返回 null。我们传递了 isNegative 函数。

fun isNegative(e: Int): Boolean {

    return e < 0
}

isNegative 函数对每个大于零的值返回 true。


以下是前一个示例的一个小修改。

main.kt
fun main() {

    val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

    val r = vals.find { isNegative(it) }
    println(r)
}

fun isNegative(e: Int): Boolean {
    return e < 0
}

在这个例子中,我们使用 it: 单个参数参数的隐式名称。

Kotlin 匿名谓词

在下一个例子中,我们使用一个匿名谓词函数。

main.kt
fun main() {

    val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

    val r = vals.find { e -> e < 0 }
    println(r)

}

在这个例子中,谓词被定义为匿名 lambda 表达式。


最后,我们有一个带有 it 的 lambda 表达式。

main.kt
fun main() {

    val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

    val r = vals.find { it < 0 }
    println(r)
}

这是最短的语法。

Kotlin 过滤谓词示例

filter 函数返回一个仅包含与给定谓词匹配的元素的列表。

main.kt
fun main() {

    val vals = listOf(1, 2, 0, 5, -4, 5, -6, 7, 8, 3)

    val r1 = vals.filter { it < 0 }
    println(r1)

    val r2 = vals.filter { it > 0 }
    println(r2)
}

在这个例子中,我们过滤掉了负值和正值。

Kotlin 谓词多重条件

以下示例使用带有两个条件的谓词。

main.kt
data class Country(val name: String, val population: Int)

fun main() {

    val countries = listOf(
        Country("Iran", 80840713),
        Country("Hungary", 9845000),
        Country("Poland", 38485000),
        Country("India", 1342512000),
        Country("Latvia", 1978000),
        Country("Vietnam", 95261000),
        Country("Sweden", 9967000),
        Country("Iceland", 337600),
        Country("Israel", 8622000)
    )

    val r = countries.filter {
        it.name.startsWith("I")
                && it.population > 100_000
    }

    r.forEach { println(it) }
}

我们创建一个国家/地区列表。 我们找到所有以“I”开头且人口超过一百万的国家/地区。

val r = countries.filter {
    it.name.startsWith("I")
            && it.population > 100_000
}

我们使用 and 运算符组合两个表达式。

Kotlin 否定谓词

我们有否定给定谓词的函数。

main.kt
fun main() {

    val words = listOf(
        "falcon", "cup", "wood", "tree", "top", "car",
        "rock", "cloud", "new", "rain", "forest"
    );

    val r = words.filterNot { it.length == 3 }
    println(r)
}

使用 filterNot,我们找到所有与给定谓词不匹配的元素。我们找到所有长度不是三个拉丁字符的字符串。

来源

Kotlin 参考文档

在本文中,我们介绍了 Kotlin 中的谓词。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 Kotlin 教程