Kotlin:运算符'=='不能应用于'kotlin.Int'和'Person?' 错误

MLe*_*Lev 2 kotlin

我从"Kotlin In Action"MEAP书中得到以下代码,该书应该找到该组中人的最大年龄并返回该年龄段的所有人:

data class Person(val name: String, val age: Int)
val people = listOf(Person("Alice", 29), Person("Bob", 31))
people.filter {it.age == people.maxBy(Person::age)}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:"Kotlin:运算符'=='无法应用于'kotlin.Int'和'Person?'." 如何修复代码以使其工作?

Ale*_*lov 9

使用map+ max代替maxBy.还要将最大值提取到变量以避免多次计算:

data class Person(val name: String, val age: Int)
val people = listOf(Person("Alice", 29), Person("Bob", 31))
val maxAge = people.map(Person::age).max()
people.filter { it.age == maxAge }
Run Code Online (Sandbox Code Playgroud)


Mep*_*phy 5

科特林的maxBy功能(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/max-by.html)返回T?为T的迭代(如T的列表).

因此,people.maxBy(Person::age)返回类型的值Person?,但您尝试将其与整数进行比较.Person?如果您愿意,可以比较年龄:

people.filter { it.age == people.maxBy(Person::age)?.age }
Run Code Online (Sandbox Code Playgroud)

将为[Person(name=Bob, age=31)]您的样品输出.