我概括了以下代码:
fun max(that: Type): Type = if (this.rank() < that.rank()) that else this
对此:
fun max(that: Type): Type = maxBy(this, that) { it.rank() }
fun maxBy<T, U : Comparable<U>>(a: T, b: T, f: (T) -> U): T
= if (f(a) < f(b)) b else a
Kotlin 的标准库中有像 maxBy
这样的函数吗?我只能找到一个数组。
最佳答案
Kotlin stdlib 有 max
和 maxBy
extension functions on Iterable
max
的签名是:
fun <T : Comparable<T>> Iterable<T>.max(): T?
maxBy
的签名是:
fun <T, R : Comparable<R>> Iterable<T>.maxBy(
selector: (T) -> R
): T?
要么使用可比较的值。 maxBy
使用 lambda 创建可与每个项目进行比较的值。
这是一个测试用例,显示了两者的实际效果:
@Test fun testSO30034197() {
// max:
val data = listOf(1, 5, 3, 9, 4)
assertEquals(9, data.max())
// maxBy:
data class Person(val name: String, val age: Int)
val people = listOf(Person("Felipe", 25), Person("Santiago", 10), Person("Davíd", 33))
assertEquals(Person("Davíd", 33), people.maxBy { it.age })
}
另请参阅:Kotlin API Reference
关于generics - 标准二进制 maxBy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034197/