стандартная двоичная функция maxBy

Я обобщил следующий код:

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 

Есть ли такая функция, как maxBy в стандартной библиотеке Котлина? Я мог только найти один для массивов.

Kotlin stdlib имеет maxBy расширения max и maxBy на Iterable

Подпись max :

 fun <T : Comparable<T>> Iterable<T>.max(): T? 

Подпись maxBy :

 fun <T, R : Comparable<R>> Iterable<T>.maxBy( selector: (T) -> R ): T? 

Либо работа с сопоставимой стоимостью. maxBy использует лямбда для создания значения, сравнимого с каждым элементом.

Вот тестовый пример, показывающий как в действии:

 @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 }) } 

См. Также: Справочник по API Kotlin

Самый простой способ добиться этого, поскольку Kotlin 1.1 – метод maxOf .

Intereting Posts