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 ...
随机推荐
- postman添加测试
我们有的时候可能需要登陆才能使用下面的接口 解决方案.在浏览器中找到cookie.然后放在postman中的Headers中
- new 做了什么
var a=function(){ this.che1 = function () { console.log(1) } this.che2 = function () { console.log(2 ...
- 可持久化Trie模板
如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 ).那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决 ...
- 【CF1243D&CF920E】0-1 MST(bfs,set)
题意:给定一张n个点的完全图,其中有m条边权为1其余为0,求最小生成树的权值和 n,m<=1e5 思路:答案即为边权为0的边连接的联通块个数-1 用set存图和一个未被选取的点的集合,bfs过程 ...
- PCL智能指针疑云 <一>
背景: 最近写了一个包,使用ndt算法拼接点云,构建三维壁面环境的点云地图. 设计一个lidar类,表征激光雷达.可以获取点云数据并存储到容器 std::vector<PointCloudPtr ...
- @清晰掉 sprintf sscanf双胞胎
sprintf() 格式化输出函数(图形) 功能: 函数sprintf()用来作格式化的输出.用法: 此函数调用方式为int sprintf(char *string,char *format,arg ...
- chrome查看JavaScript的堆栈调用
设置断点之后,查看的时候,注意右侧栏. 在调试按钮下方,有一个watch和call stack,
- KVM 记录
mkdir -p /home/hugepagesmount -t hugetlbfs hugetlbfs /home/hugepages 配置文件 vim /etc/libvirt/qemu.conf ...
- Xcode升级10.3后XIB文件报错
Xcode升级10.3后XiB文件包错,提示: Failed to find or create execution context for description '<IBCocoaTouch ...
- 二、Python基础
1.变量名 数字,字母,下划线:aaa1;aa_b1 不能以数字开头:1aa 变量名不能是python内部的关键字 2.getpass import getpass username=raw_inpu ...