Kotlin学习(4)Lambda
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的更多相关文章
- Kotlin函数与Lambda表达式深入
Kotlin函数: 关于Kotlin函数在之前也一直在用,用fun来声明,回忆下: 下面再来整体对Kotlin的函数进行一个学习. 默认参数(default arguments): 先来定义一个函数: ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Java8学习笔记----Lambda表达式 (转)
Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...
- 通过这些示例快速学习Java lambda语法
对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...
- kotlin 学习感受
目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...
- Kotlin 学习笔记(一)
(Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...
- JAVA8学习——深入浅出Lambda表达式(学习过程)
JAVA8学习--深入浅出Lambda表达式(学习过程) lambda表达式: 我们为什么要用lambda表达式 在JAVA中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 ...
- Kotlin学习快速入门(7)——扩展的妙用
原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...
- 释放Android的函数式能量(I):Kotlin语言的Lambda表达式
原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...
随机推荐
- vmware哪个版本好用
这个问题要根据你的物理机操作系统而定,如果你电脑是xp,就选择vmw7.1.6:如果你电脑是win7,win8,win8.1,就选择vmw10.0.1.不要去理会vmw8.vmw9这些都是vmw10的 ...
- python中的时间模块
废话不多说,看代码 import datetime,time import calendar #时间戳 t1 = time.time() print('当前时间戳是{}'.format(t1)) #格 ...
- Android开源SlidingMenu的使用
一.SlidingMenu简介 SlidingMenu是最常用的几个开源项目之一. GitHub上的开源项目Slidingmenu提供了最佳的实现:定制灵活.各种阴影和渐变以及动画的滑动效果都不错.不 ...
- Jenkins部署从节点
由于jenkins上承载项目太多,需要专门的节点来执行需要构建的操作. 参考:https://www.cnblogs.com/lxs1314/p/7551309.html job仅使用绑定的slave ...
- 《数据结构(C语言)》苏小红 课本案例
期末了,赶紧复习一波,手打一份书上的代码以便随时查阅 第二章: //顺序表存储结构 #define MAXSIZE 100 typedef struct { Elemtype *elemt; int ...
- 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
let carr = [{ "code": "000", "agyTypeCode": "1", "name& ...
- 第五周课程总结&试验报告 (三)
课程总结 一,类的继承格式 1.在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 {} class 子类 extends 父类 {} ...
- pytorch之Resize()函数
Resize函数用于对PIL图像的预处理,它的包在: from torchvision.transforms import Compose, CenterCrop, ToTensor, Resize ...
- day64—ajax技术学习笔记
转行学开发,代码100天——2018-05-19 Ajax技术学习笔记 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).AJA ...
- Collector解读以及自定义
一.Collector接口解读: Collector接口解读: public interface Collector<T, A, R> { Supplier<A> suppli ...