kotlin: max/min/maxOrNull/minOrNull/MaxByOrNull/MinByOrNull/minOfOrNull/maxOfOrNull函数
一,功能
-
minOrNull()
:返回集合中最小的元素,若集合为空则返回null
。 -
maxOrNull()
:返回集合中最大的元素,若集合为空则返回null
。 -
minByOrNull { }
:返回具有最小属性值的元素(集合为空时返回null
)。 -
maxByOrNull { }
:返回具有最大属性值的元素(集合为空时返回null
)。 -
minOfOrNull { }
:返回所有选择器函数结果中的最小值(集合为空时返回null
)。 -
maxOfOrNull { }
:返回所有选择器函数结果中的最大值(集合为空时返回null
)。
区别:
-
maxByOrNull
和minByOrNull
会返回属性值最大的元素,而不是值本身。 -
maxOfOrNull
和minOfOrNull
返回的是选择器结果的最大/最小值。
二,例子:
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// 最小值和最大值
println(numbers.min()) // 1
println(numbers.minOrNull()) // 1
println(numbers.max()) // 10
println(numbers.maxOrNull()) // 10
val mList2: ArrayList<Int> = arrayListOf()
//println(mList2.min()) // 触发异常
println(mList2.minOrNull()) // null
//println(mList2.max()) // 触发异常
println(mList2.maxOrNull()) // null
}
运行结果:
三,例子:
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
val words = listOf("anne", "michael", "caroline", "dimitry","abc", "emilio")
// 根据长度选择最大/最小的字符串
println(words.maxByOrNull { it.length }) // caroline
println(words.minByOrNull { it.length }) // abc
// 最大/最小长度值
println(words.maxOfOrNull { it.length }) // 8
println(words.minOfOrNull { it.length }) // 3
// 使用谓词根据条件进行查找,此时比较的是表达式给出的boolean结果
println(words.maxByOrNull { it.length > 5 }) // michael
println(words.maxByOrNull { it.length < 5 }) // anne
println(words.minByOrNull { it.length > 5 }) // anne
println(words.minByOrNull { it.length < 5 }) // michael
var fruitsMap = mutableMapOf("apple" to 2.5, "orange" to 5, "pear" to 3)
val maxPriceFruit = fruitsMap.maxByOrNull { it.value.toFloat() }
println(maxPriceFruit) //orange=5
val minPriceFruit = fruitsMap.minByOrNull { it.value.toFloat() }
println(minPriceFruit) //apple=2.5
}
运行结果: