当前位置: 首页 > news >正文

kotlin基础【3】

Kotlin Playground: Edit, Run, Share Kotlin Code Online

资料:kotlin实战 第一章

data class Person(val name: String,val age:Int?=null)//允许接受以age为空,当为空将它赋值为null,如果不这么写直接写age:Int?是否可以fun main(args:Array<String>){//经过上一章学习,val指的是可变变量val persons = listOf(Person("Alice"),Person("Bob",age = 29))val oldest = persons.maxByOrNull{it.age?:0}println("The oldest is :$oldest")}

如果将 age 参数改为age:Int?(不提供默认值),则创建对象时必须显式传入 age: 

data class Person(val name: String, val age: Int?) // 没有默认值fun main(args: Array<String>) {// 必须显式传入age参数,即使是nullval persons = listOf(Person("Alice", null), Person("Bob", 29))val oldest = persons.maxByOrNull { it.age ?: 0 }println("The oldest is :$oldest")
}

代码分析

listOf()函数解释:

listOf()函数是Kotlin标准库中的函数,用于创建一个不可变的列表,和上一章的setOf()相似
它返回一个包含这些参数的列表
这个列表创建后,不能添加、删除或替换元素(不可变特性)

自动推断类型

这一点我们在之前的章节以经提到过,kt会根据上下文自动地去判断类型

val persons = listOf(Person(...), Person(...))

在这里会自动推断类型为List<Person>
 Kotlin具有类型推断能力,不需要显式声明变量类型

maxByOrNull()函数

这是集合(Collection)包括了Set List的扩展函数,用于找出集合中根据指定条件计算后最大值的元素,它接收一个lambda表达式({ it.age ?: 0 })作为参数,这个lambda定义了排序的依据

 it代表集合中的每个元素(这里是Person对象)it.age ?: 0表示:如果age不为null则使用age的值,否则使用0(空安全处理)如果集合为空,该函数会返回null,这也是它名字中"OrNull"的含义

 val oldest = persons.maxByOrNull { it.age ?: 0 }

it指代的就是前面调用maxByOrNull函数的这个对象 

函数式编程

头等函数:把函数的一小段行为当作值来使用,并用一个变量保存它,把它当作参数传递或者作为其他函数的返回值

比如kotlin基础【2】-CSDN博客

如when语句的返回值是一个变量,所以可以把when语句的值赋值给一个变量

var data = when (it.dataCategory) {CategoryTypeConfig.TYPE_FIRST_SYSTEM -> {DataSourceConstants.SOURCE_PRIMARY_SYSTEM}CategoryTypeConfig.TYPE_SECONDARY_TOOL -> {DataSourceConstants.SOURCE_AUXILIARY_TOOL}CategoryTypeConfig.TYPE_THIRD_PARTY -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}else -> {DataSourceConstants.SOURCE_EXTERNAL_MODULE}
}
data class Person(val name: String, val age: Int? = null)  // 这种写法更灵活fun main(args: Array<String>) {// val是不可变变量,var是可变变量val persons = listOf(Person("Alice"),  // 可以不指定age,默认nullPerson("Bob", age = 29))// 定义查找函数fun findPerson(predicate: (Person) -> Boolean): Person? {return persons.find(predicate)}// 正确定义函数fun findAlice() = findPerson { it.name == "Alice" }fun findBob() = findPerson { it.name == "Bob" }// 正确调用val alice = findAlice()val bob = findBob()println("Alice: $alice")  // 输出 Alice: Person(name=Alice, age=null)println("Bob: $bob")      // 输出 Bob: Person(name=Bob, age=29)
}
    // 定义查找函数fun findPerson(predicate: (Person) -> Boolean): Person? {return persons.find(predicate)}// 正确定义函数fun findAlice() = findPerson { it.name == "Alice" }fun findBob() = findPerson { it.name == "Bob" }

http://www.dtcms.com/a/302730.html

相关文章:

  • 第一章:Go语言基础入门之流程控制
  • Power Query合并数据
  • 力扣 hot100 Day58
  • JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
  • EXCEL 怎么把汉字转换成拼音首字母
  • 10 - 大语言模型 —Transformer 搭骨架,BERT 装 “双筒镜”|解密双向理解的核心
  • Java-数构排序
  • ATF 运行时服务
  • 【Web】京麒CTF 2025 决赛 wp
  • USRP-X440 2025年太空与导弹防御研讨会
  • 近屿智能正式发布AI得贤招聘官的AI面试官智能体6.3版本:交付替代人类面试官的打分结果
  • 1990-2024年上市公司财务指标/应计利润数据(30+指标)
  • MFC UI对话框
  • 基于Uniapp及Spring Boot的奢侈品二手交易平台的设计与实现/基于微信小程序的二手交易系统
  • 零基础学习性能测试第九章:全链路追踪-系统中间件节点监控
  • 【pytest高阶】源码的走读方法及插件hook
  • Ubuntu lamp
  • 商用车的自动驾驶应用场景主要包括七大领域
  • 十七、K8s 可观测性:全链路追踪
  • AI对服务器行业的冲击与启示:从挑战走向重构
  • vue3【组件封装】头像裁剪 S-avatar.vue
  • 谋先飞(Motphys)亮相 2025 世界人工智能大会:以物理仿真重构智能未来
  • Apache Commons VFS:Java内存虚拟文件系统,屏蔽不同IO细节
  • YOLOv11改进:添加SCConv空间和通道重构卷积二次创新C3k2
  • Error reading config file (/home/ansible.cfg): ‘ACTION_WARNINGS(default) = True
  • 如何理解有符号数在计算机中用​​补码​​存储
  • 网络安全第14集
  • C51:使用PWM波调节LED灯的亮度
  • GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【三】
  • 如何检测并修复服务器中的rootkit威胁