Generics 标准二进制maxBy函数

Generics 标准二进制maxBy函数,generics,max,comparable,standard-library,kotlin,Generics,Max,Comparable,Standard Library,Kotlin,我概括了以下代码: fun max(that: Type): Type = if (this.rank() < that.rank()) that else this fun max(that:Type):Type=if(this.rank()U:T =if(f(a)

我概括了以下代码:

fun max(that: Type): Type = if (this.rank() < that.rank()) that else this
fun max(that:Type):Type=if(this.rank()
为此:

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
funmax(that:Type):Type=maxBy(this,that){it.rank()}
有趣的麦克斯比(a:T,b:T,f:T)->U:T
=if(f(a)
Kotlin的标准库中是否有类似于
maxBy
的函数?我只能为阵列找到一个。

Kotlin stdlib具有和

max
的签名为:

fun <T : Comparable<T>> Iterable<T>.max(): T?
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 1.1是一种方法