kotlin学习(四)

Lambda编程

一.Lambda表达式和成员引用

简而言之:作为函数参数的代码块

{x : Int, y : Int -> x + y}//左半部分为参数,右半部分为函数体

如果lambda表达式是函数调用的最后一个实参,可以放到括号的外面
需要注意的是,kotlin不会仅限于访问final变量,在lambda内部也可以修改这些变量

成员引用:通过类名::成员名的方式,引用顶层函数时可以直接省略类名

val getAge = {person : Person -> person.age}
val getAge = Person::age

二.集合的函数式API

filter:从集合中移除你不需要的元素,但是不会改变这些元素
map:对集合中的每一个元素应用给定的函数并把结果收集到另一个集合中
all:对所有元素是否都满足判断
any:是否至少存在一个匹配的元素
groupBy:把列表转换成分组的map
API可以看源码去了解

三.惰性集合操作:序列

在使用集合的链式API时,每一次调用都会生成中间集合,使用序列可以避免创建临时中间对象

val people : List<Person> = ...
people.asSequence().filter().map().toList()

中间操作:返回另一个序列
末端操作:返回一个结果
如上代码所示,toList是末端操作,filter和map是中间操作
中间操作始终是惰性的,也就是说没有toList时,控制台不会有输出,末端操作触发了所有的延期计算
及早求值在整个集合上执行每个操作;惰性求职则逐个处理元素

四.使用Java函数式接口

当显式声明一个匿名对象时,每次调用都会生成一个新的对象;使用lambda时,如果没有访问任何来自定义它的函数的变量,则会重用同一个匿名类实例

五.带接收者的lambda:with和apply

(一)with函数

//不使用with时的效果
fun noWith(name : String) : String{
    val stringBuilder = StringBuilder()
    for (letter in 'A' .. 'Z')
        stringBuilder.append(letter)
    stringBuilder.append("hello")
    return stringBuilder.toString()
}
//简单的使用
fun testWith(name : String) : String {
    val stringBuilder = StringBuilder()
    return with(stringBuilder){
        append(name)
        for (letter in 'A'..'Z')
            this.append(letter)
        toString()
    }
}
//终极简化
fun testWithTwo(name :String) = with(StringBuilder()){
    append(name)
    for (letter in 'A'..'Z') 
        append(letter)
    append("hello")
    toString()
}

可以看出来with函数有两个参数,把第一个参数转换成作为第二个参数传给它的lambda的接收者,可以显式的通过this访问

(二)apply函数

apply函数和with比较接近,区别是apply始终会返回作为实参传递给它的对象,也就是接收者对象
改写with的例子如下,可以看出apply是被声明为一个扩展函数

fun testApply() : String = StringBuilder().apply {
    for (letter in 'A'..'Z')
        append(letter)
    append("hello")
}.toString()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值