Kotlin:运算符'=='不能应用于'kotlin.Int'和'Person?' 错误
我从“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)}
但是,我收到以下错误:“Kotlin:Operator'=='不能应用于'kotlin.Int'和'Person?'。 如何修复代码以使其工作?
Kotlin的maxBy
函数( https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/max-by.html )会返回T?
对于T的迭代(如T的列表)。
因此, people.maxBy(Person::age)
返回Person?
类型的值Person?
,但是你想把它和一个整数进行比较。 你可以比较这个Person?
的年龄Person?
如果你希望:
people.filter { it.age == people.maxBy(Person::age)?.age }
将输出[Person(name=Bob, age=31)]
为您的示例。
使用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 }
我会做这样的事情:
list = people.groupBy{ it.age }.maxBy{ it.key }?.value