我从"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?'." 如何修复代码以使其工作?
使用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)
科特林的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)]您的样品输出.
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |