kotlin 常用高阶函数
package kotlinall.chapter5import java.io.BufferedReader
import java.io.FileReader
import java.lang.StringBuilder//高阶函数 传入的参数是函数 或者返回是函数
class Hello{fun world(){println("Hello World")}
}
fun test(){}
class PdfPrinter{fun println(any:Any){kotlin.io.println(any)}
}
//高阶函数基础
fun baseFun(vararg args:String){//1.引用类里面的函数val hellowrold = Hello::world//拿到函数的引用args.filter(String::isNotEmpty)//接收的函数类型 T类型的参数 返回boolean值的函数 isNotEmtpy有一个隐形的参数就是String实例本身//2.引用包级函数 直接::函数名称val print1 = ::test//3.引用调用者的函数val pdfPrinter:PdfPrinter = PdfPrinter()args.forEach(pdfPrinter::println)//args.forEach(::println)
}//常见高阶函数
fun commonFun(){val list = listOf<Int>(1,2,3,4,5)val newList = ArrayList<Int>()list.forEach{val newElement = 2*it + 3newList.add(newElement)}newList.forEach(::println)val newList1 = list.map { it*2+3 }//map 对每一个值进行处理添加一个新的list里面返回val newList2 = list.map { it.toDouble() }val newList3 = list.map(Int::toDouble)//采用函数引用的方式去传递 因为使用类的实例调用 所以有一个默认实例的参数val list4 = listOf(1..20,2..5,100..322)val flatList1 = list4.flatMap{//把集合的集合打平 可以对集合里的元素继续进行mapit}val flatList = list4.flatMap{//把集合的集合打平 可以对集合里的元素继续进行mapit.map {"NO.$it"}}flatList.forEach(::println)//flatList1.reduce { acc, i -> acc+i }//acc 当前运算结果 和当前元素的值(0..6).map(::factorial) //打印0,6的 阶乘的值//给reduce acc 添加初始值flatList1.fold(5){acc,i->acc+i}//redule acc 必须是 flatList迭代元素类型的父类//fold acc可以传入任意类型flatList1.fold(StringBuilder()){acc,i->acc.append(i).append(",")}println((0..6).joinToString(","))//拼接字符串flatList1.foldRight(StringBuilder()){i,acc->acc.append(i).append(",")}//倒叙拼接(0..6).map(::factorial).filter {it %2 ==1} //打印0,6的 阶乘的值 过滤出基数的值(0..6).map(::factorial).filterIndexed { index, i ->index%2==1 }//奇数位的结果(0..6).map(::factorial).takeWhile { it%2==0}//取到第一个不是偶数则终止条件 (取到一个不满足条件的 终止循环)}fun factorial(n:Int):Int{if(n == 0) return 1return (1..n).reduce { acc, i ->acc*i }
}class Person(val name:String,val age:Int){fun work(){println("$name is wroking")}
}
fun findPerson():Person?{return null
}
fun commonFun1(){val person = findPerson()println(person?.name)//不为空则打印name 空显示空字符串findPerson()?.let { //不为空则调用letprintln(it.name)println(it.age)}findPerson()?.apply { //apply 相当于处于person类中 可以直接调用方法 和字段work()println(age)}val br = BufferedReader(FileReader("hello.txt"))with(br){//with 接收一个参数 作为apply使用var line:String?while (true){line = readLine()?:breakprintln(line)}close()}val br1 = BufferedReader(FileReader("hello.txt")).readText()BufferedReader(FileReader("hello.txt")).use {//对于需要close的 使用的模板方法 可以使用use去处理var line:String?while (true){line = it.readLine()?:breakprintln(line)}}}fun main(args: Array<String>) {}
kotlin 常用高阶函数相关推荐
- Kotlin常用高阶函数
高阶函数 高阶函数可以把函数作为参数传递或者返回值返回的函数.既然函数对象作为数值进行传递那么就会有如何引用函数的问题.函数引用的三种方式: 直接双冒号的方式,引用的是包级别的函数: // 这种引用适 ...
- Kotlin的高阶函数和常用高阶函数
Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...
- python list大小_4个python常用高阶函数的使用方法
1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...
- Kotlin使用高阶函数实现多方法回调
最近项目中开始使用kotlin,遇到的一个问题就是从多方法回调的问题 常规的java回调如下: public interface OnCallBack<T> {void onSuccess ...
- 【Kotlin】Kotlin的高阶函数与Lambda表达式
前言 Kotlin的高阶函数与Lambda表达式是Kotlin的两大特色,使用频率非常高.熟悉它的用法与本质对于简化代码.提升开发效率非常有帮助. 这两个概念不是同一个东西,但是又有非常紧密的关联.这 ...
- python四种常用高阶函数
1.什么是高阶函数 把函数作为参数传入,这样的函数称为高阶函数 例如·: def func1(x,y,f):return f(x) + f(y) num = func1(-10, 2, abs) pr ...
- Swift 常用高阶函数
Swift 常用高阶函数 map函数 对每一个元素进行运算 计算每一个元素的count 对元素进行大小写变换 转换类型 sorted函数 从小到大排序 从大到小排序 flatMap函数 降维 过滤元素 ...
- javascript数组常用高阶函数
一·数组常用高阶函数 Array.prototype.filter() 此方法接收一个回调函数作为参数,回调参数接受三个参数,item(源数组中的每一个元素).index(数组下标).arr(源数组) ...
- Kotlin 使用高阶函数实现回调
lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.s ...
最新文章
- Java 散点图 数据库 代码_java – 来自数据库的jfreechart中的散点图
- idea base64encoder没有jar包_老师,免费版的IDEA为啥不能使用Tomcat?
- java8 两个list取差集_java8 多个list对象用lambda求差集操作
- 清水河畔论坛二手帖子爬虫
- FileDemo4~5 获取一个目录中的所有子项/部分子项
- war包还原成项目_将War包还原成java web项目
- 百度顶会论文复现营论文心得
- 哈希原理与常见哈希函数
- 2021财院ACM选拔赛题解
- ios学习笔记之三- iPhone模拟器基本操作
- Vj程序设计复杂模拟题训练
- RP50 RP55 吉他效果器音色推荐
- Java中的Swing概述
- Electron Fiddle 通过代理加速下载(Mac)
- 第一次CSP认证110分
- android TV端如何读取微信网页版二维码显示生成一张图片
- dhcp服务器显示不启用,如何启用dhcp服务器
- 顺丰--Java丰桥接口整体封装(下单、查询、打印)
- fix indent命令实现纳米摩擦及摩擦力计算案例
- 《土地公婆》钟久夫邓天晴演绎梁祝爱情
热门文章
- consul健康检测
- User: root is not allowed to impersonate anonymous (state=08S01,code=0)
- 树莓派直接连接笔记本电脑方法
- Guess Number(Java版)
- [Intensive Reading]图像生成:GAN
- 什么是CAP?适用的场景有哪些?
- vue耦合程度是什么意思
- Java之Lists.Partition项目中的使用
- windows10下cuda9.2升级到cuda10.2
- 神经网络算法详解 04:反馈神经网络(Hopfield、BAM、BM、RBM)