我对这些方法的不同用例感到有点困惑.我可以看到一个在Kotlin.math中,一个在Kotlin.comparisons中,所以我猜maxOf()可以与用户定义的类的对象一起使用,但这是唯一的区别因素吗?

推荐答案

或许了解这里的历史会有所帮助.

在Kotlin 1.1、minOfmaxOf got added as their own separate feature中.我认为你的 idea 是,你应该在相当非数学的情况下使用它.毕竟,他们给出的例子是:

val list1 = listOf("a", "b")
val list2 = listOf("x", "y", "z")
val minSize = minOf(list1.size, list2.size)
val longestList = maxOf(list1, list2, compareBy { it.size })

想象一下,仅仅是试图编写一些可读的代码,在其中添加单词"of"只会使这行代码更具英式风格.

后来,在Kotlin 1.2,they added a whole lot of math constants and functions into the standard library,并称之为kotlin.math包.从minmax are also mathematical functions开始,他们也增加了minmax.

这只是我的观点,但与minOfmaxOf相比,如果把minmax放在一个更复杂的数学表达式中,它们的可读性会更好.这会让整件事看起来更像数学,而不是英语.

在功能上,它们的行为是相同的,就像你说的,minOfmaxOf也适用于任何Comparable种东西,或者任何东西,如果你提供Comparator的话.这是因为minOfmaxOf严格地不是为数学情况而设计的,而minmax are则是为数学情况而设计的.

请注意,在Kotlin 1.4中,还添加了maxOfminOf的vararg版本,但没有添加minmax版本.同样,这是因为mathematicalminmax通常只接受两个参数.

Kotlin相关问答推荐

在Kotlin中处理结果的高阶函数

只能在元素区域中点击的Jetpack Compose列

Android Jetpack编写androidx.compose.oundation.lazy.grid.Items

编译后的JavaFX应用程序立即以静默方式崩溃

访问者闭包中的Kotlin序列yield 率

有没有办法在 jetpack compose 中将 TextField 密码点图标增加得更大?

try 一次性插入多条记录时,JOOQ连接为空错误

可以在没有导入声明的情况下调用 Kotlin 扩展函数吗?

如何获取@JsonProperty 名称列表?

Kotlin 数据类中的大量参数

Kotlin 协程中的 Dispatchers.Main 和 Dispatchers.Default 有什么区别?

在构造函数中仅注入某些参数

kotlin:扩展方法和空接收器

Dagger2 Qualifier 不适用于 Kotlin?

Kotlin - 具有私有构造函数的类的工厂函数

如果kotlin已经有了getter和setter,为什么在数据类中有componentN函数?

我应该使用Kotlin数据类作为JPA实体吗?

查找是否在列表中找到具有特定属性值的元素

如何在Kotlin中将字符串转换为InputStream?

可见性不适用于 Kotlin