Kotlin中的maxByOrNull函数
现在我在学习Kotlin,我有一个问题。在下面的代码中,我不理解第2行和第3行中完成的工作。实际上,我理解所做的工作,但代码对我来说似乎有点复杂。你能解释一下这几行代码吗Kotlin中的maxByOrNull函数,kotlin,Kotlin,现在我在学习Kotlin,我有一个问题。在下面的代码中,我不理解第2行和第3行中完成的工作。实际上,我理解所做的工作,但代码对我来说似乎有点复杂。你能解释一下这几行代码吗 data class Item(val name: String, val price: Float) // 1 data class Order(val items: Collection<Item>) fun Order
data class Item(val name: String, val price: Float) // 1
data class Order(val items: Collection<Item>)
fun Order.maxPricedItemValue(): Float = this.items.maxByOrNull { it.price }?.price ?: 0F // 2
fun Order.maxPricedItemName() = this.items.maxByOrNull { it.price }?.name ?: "NO_PRODUCTS" // 3
val Order.commaDelimitedItemNames: String // 4
get() = items.map { it.name }.joinToString()
fun main() {
val order = Order(listOf(Item("Bread", 25.0F), Item("Wine", 29.0F), Item("Water", 12.0F)))
println("Max priced item name: ${order.maxPricedItemName()}") // 5
println("Max priced item value: ${order.maxPricedItemValue()}")
println("Items: ${order.commaDelimitedItemNames}") // 6
}
数据类项(val name:String,val price:Float)//1
数据类顺序(val项:集合)
趣味订单.maxPricedItemValue():Float=this.items.maxByOrNull{it.price}?.price?:0F//2
有趣的订单.maxPricedItemName()=this.items.maxByOrNull{it.price}?.name:“无产品”//3
val Order.commaDelimitedItemNames:String//4
get()=items.map{it.name}.joinToString()
主要内容(){
val订单=订单(列表(项目(“面包”,25.0F)、项目(“葡萄酒”,29.0F)、项目(“水”,12.0F)))
println(“最高定价商品名称:${order.maxPricedItemName()}”)//5
println(“最大定价项目值:${order.maxPricedItemValue()}”)
println(“Items:${order.commaDelimitedItemNames}”)//6
}
如果你能帮忙,我将非常高兴。谢谢
此
是订单
的实例。订单
包含一组项目
。每个项目
包含一个名称
和一个价格
这意味着:
this.items.maxByOrNull { it.price }?.price ?: 0F
翻译为:
- 在此
中,从集合中取出包含最大订单
价格的
项目
- 如果有实际的
返回项目
项目的
价格
- 如果在这个顺序中没有实际的
,那么给我null(如果你给我null,我将把项
作为0
数字返回)Float
this.items.maxByOrNull { it.price }?.name ?: "NO_PRODUCTS"
翻译为:
- 在此
中,从集合中取出包含最大订单
价格的
项目
- 如果存在实际的
返回项目
项目的
名称
- 如果此订单中没有实际的
,则给我null(如果你给我null,我将返回到项目
)无产品
- in
将返回价格最大的items.maxByOrNull{it.price}
,但是如果Item
集合为空,它将返回items
null
表示如果值不为null,我们只想执行下一个过程(在我们的示例中,如果值不为?
null,我们只想返回
的结果)maxByOrNull
表示如果前面的东西为空,那么这个?:something
就是您将得到的值something
的整个页面非常有用。
这是订单的实例。订单
包含一组项目
。每个项目
包含一个名称
和一个价格
这意味着:
this.items.maxByOrNull { it.price }?.price ?: 0F
翻译为:
- 在此
订单
中,从集合中取出包含最大价格的项目
- 如果有实际的
项目
返回项目的价格
- 如果在这个顺序中没有实际的
项
,那么给我null(如果你给我null,我将把0
作为Float
数字返回)
这是:
this.items.maxByOrNull { it.price }?.name ?: "NO_PRODUCTS"
翻译为:
- 在此
订单
中,从集合中取出包含最大价格的项目
- 如果存在实际的
项目
返回项目的名称
- 如果此订单中没有实际的
项目
,则给我null(如果你给我null,我将返回到无产品
)
我们这样做是因为:
- in
items.maxByOrNull{it.price}
将返回价格最大的Item
,但是如果items
集合为空,它将返回null
?
表示如果值不为null,我们只想执行下一个过程(在我们的示例中,如果值不为null,我们只想返回maxByOrNull
的结果)
?:something
表示如果前面的东西为空,那么这个something
就是您将得到的值
整个页面非常有用。这是一个我意想不到的好解释。非常感谢你@Alex.T也可以添加扩展函数的解释:)这是一个我没想到的很好的解释。非常感谢你@T还可以添加扩展函数的解释:)