generics - 标准二进制 maxBy 函数

标签 generics max comparable standard-library kotlin

我概括了以下代码:

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 有 maxmaxBy 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/

相关文章:

Java - 类数据类型 - 排序问题

C# 泛型函数

generics - 无法定义 'a->' b 函数列表

c# - 如何检查 ObjectQuery<T> 表达式树中是否存在 OrderBy

sql - NHibernate LINQ BIGINT 类型转换

java - 等距排序的比较误差

python - 通用单例的类型提示?

python - Pandas 有条件创建数据框列 : based on multiple conditions max

vb.net - 查找 VB.Net DataTable 的最大值

java - 如何摆脱 Unchecked call to 'compareTo(T)' 警告?