Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin中的maxByOrNull函数_Kotlin - Fatal编程技术网

Kotlin中的maxByOrNull函数

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

现在我在学习Kotlin,我有一个问题。在下面的代码中,我不理解第2行和第3行中完成的工作。实际上,我理解所做的工作,但代码对我来说似乎有点复杂。你能解释一下这几行代码吗

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还可以添加扩展函数的解释:)