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 ...
随机推荐
- python-套接字编程之tcp
服务端和客户端. 服务端脚本: # Auther:AlphaPanda # Description:server # Version:1 # Date:Mon Dec 2 09:02:01 EST 2 ...
- VMWare虚拟机启动不了有个叉叉的解决办法
打开VMWare虚拟机提示有: This virtual machine appears to be in use. If this virtual machine is already in use ...
- java HTTP文件断点上传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- UVA 12299 线段树 ( 单点跟新 , 区间查询)
题目链接:题意:在传统的RMQ的基础上加上一个操作:shift(i1,i2,i3...ik),表示将这些元素,依次向左移动一位(训练指南247页) #include <iostream> ...
- 管理es索引-使用 Xput创建索引
curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求.简单的认为是可以在命令行下面访问url的一个工具.在centos的默认库里面是有cur ...
- DVWA--XSS(stored)
XSS 0X01 1.简介 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式 ...
- PTA编程总结二
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...
- architecture 20190628
https://abp.io/ --ABP v2 官网 https://grpc.io/ --gRPC官网 https://devblogs.microsoft.com/dotnet/introdu ...
- C++获取寄存器eip的值
程序中需要打印当前代码段位置 如下 #include <stdio.h> #include <stdlib.h> #include <math.h> #ifdef ...
- Cygwin 技巧
apt-cyg mirror 'https://mirrors.aliyun.com/cygwin/' #设置镜像 windows下安装工具包 inetutils;其中包含telnet等命令; Pyt ...