Lanbda基础

/*
*Lambda允许把代码块当作参数传递给函数
*/
fun a(plus:(Int,Int)->Unit){
plus(,) //声明函数的地方,调用代码块,在这里传参
} //在调用函数的地方,写代码块的实现
fun main(args: Array<String>) {
a({a1,a2->
println(a1+a2) //在这里操作参数
})
} /*
*如果这个代码块是最后一个参数,可以把大括号写在圆括号外面
*/
a(){a1,a2->
println(a1+a2) //在这里操作参数
} /*
*如果这个代码块是唯一的参数,可以省略括号
*/
a{a1,a2->
println(a1+a2) //在这里操作参数
} /*
*如果代码块的参数只有一个a1,那么这个参数也可以省略,默认为it
*/
a{
println(it) //在这里操作参数
}

Lambda对集合的操作

val list= arrayListOf(,,,,,,)

//foreach遍历,这里省略了参数
>>> list.forEach{
>>> println("${it} ")
>>> } //filter 只保留符合条件的数据
>>>println( list.filter { it> } )
[,,,,] //map 得到操作后的数据
>>>println( list.map { it>*it } )
[, , , , , , ] //all 判断集合内数据是否全都符合
>>>println( list.all { it> } )
false //any 判断集合是否至少存在一个符合条件的值
>>>println( list.any { it> } )
true //find 找到符合条件的第一个数据
>>>println( list.find { it> } ) //count 找到符合条件的数据数量
>>>println( list.find { it> } ) //可以链式调用,如 找到it+1 之后,是偶数的数据
>>>println( list.map { it+ }.filter{ it%== } )
[, , ] //上面的链式调用,其实把map的结果保存一次之后,再进行filter,在保存filter结果,其实保存了两次,可以把初始集合转换成序列,提高效率
list.asSequence()
.map { it+ }
.filter{ it%== }

带接收者的Lambda:with和apply

/*
*正常打印A到Z的函数,会重复写result很多次
*/
fun alphabet():String{
val result=StringBuilder()
for(i in 'A'..'Z'){
result.append(i)
}
result.append("\n end!")
return result.toString()
} /*
*使用with来重构,with可以接收str对象,Lambda里面的代码块可以省略str,最后一行作为返回值
*/
fun alphabet():String{
val str=StringBuilder()
return with(str){
for(i in 'A'..'Z'){
this.append(i) //可以用this显式调用,也可以省略
}
append("\n end!")
toString()
}
} /*
*使用apply来重构,它把调用apply的对象作为接收对象进行操作
*/
fun alphabet():String{
return StringBuilder().apply{
for(i in 'A'..'Z'){
append(i)
}
append("\n end!")
}.toString()
}

Kotlin学习(4)Lambda的更多相关文章

  1. Kotlin函数与Lambda表达式深入

    Kotlin函数: 关于Kotlin函数在之前也一直在用,用fun来声明,回忆下: 下面再来整体对Kotlin的函数进行一个学习. 默认参数(default arguments): 先来定义一个函数: ...

  2. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  3. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

  4. 通过这些示例快速学习Java lambda语法

    对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...

  5. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  6. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  7. JAVA8学习——深入浅出Lambda表达式(学习过程)

    JAVA8学习--深入浅出Lambda表达式(学习过程) lambda表达式: 我们为什么要用lambda表达式 在JAVA中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 ...

  8. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  9. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

随机推荐

  1. 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋

    题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...

  2. 【织梦手机端仿站】和PC一个后台

    卸载插件,织梦默认带手机站,无需复杂使用插件以后不方便升级.织梦2015年6月8日更新后,就添加了很多针对手机移动端的设计,最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能,织梦更新后,默认 ...

  3. nowcoder 79F 小H和圣诞树 换根 DP + 根号分治

    设节点个数大于 $\sqrt n$ 的颜色为关键颜色,那么可以证明关键颜色最多有 $\sqrt n$ 个.对于每个关键颜色,暴力预处理出该颜色到查询中另一个颜色的距离和. 对于不是关键颜色的询问,直接 ...

  4. CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询

    链接: A - 秋实大哥与小朋友 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Subm ...

  5. php 配置优化

    调整php内存限制 vim /usr/local/php/php.ini memory_limit = 1024M 内存优化 /usr/local/php/etc/php-fpm.conf https ...

  6. (转)python selenium-webdriver 元素操作之鼠标和键盘事件

    参考资料:https://blog.csdn.net/zh175578809/article/details/76767748 参考资料2:https://blog.csdn.net/qq_41817 ...

  7. [CSP-S模拟测试]:光线追踪(线段树)

    题目背景 初中时的乔猫试着组建了$NEWorld$开发组,可是不久之后却因为合作上的问题(和乔猫工程水平差,代码混乱的问题),开发组成员之间常常产生矛盾,关系越来越不如以前......一年下来,受到长 ...

  8. (知识)width、naturalWidth、clientWidth、offsetWidth区别整理

    今天在做图片裁剪功能的时候,参考了下网友的资料,发现大家对图片宽度的获取方式不尽相同,于是详细整理下各个属性的区别(详细请参考MDN). 1,HTMLImageElement.width是一个unsi ...

  9. Mybatis 自动生成mapper文件

    在pom.xml下的<build>内加入: <build> <plugins> <plugin> <groupId>org.mybatis. ...

  10. 高级软件测试技术-任务进度-Day02

    任务进度11-14 使用工具 Jira 小组成员 华同学.郭同学.穆同学.沈同学.覃同学.刘同学 任务进度 在经过了昨天的基本任务分配之后,今天大家就开始了各自的内容,以下是大家任务的进度情况汇总. ...