Kotlin Lambda使用

Kotlin Lambda使用

fun main() /*: Unit*/ {// Lambda会慢慢的难度升级// Kotlin Unit == Java void// TODO 下面全部都是函数声明, 既然是函数声明,就不能调用// 函数的声明 用lambda去描述函数的声明val method1 : () -> Unitval method2 : (Int, Int) -> Unitval method3: (String, Double) -> Anyvar method4 : (Int, Double, Long, String) -> Booleanvar method5 : (Int, Int) -> Int// 函数的声明 + 函数的实现// : (参数)->返回  方式一 () 基本上属于声明 todo 上面已经讲过了 就是函数的声明// = {参数->方式}  方式二 () 基本上属于声明实现结合val method01 : () -> Unit = { println("我是method01函数") }method01() // 调用函数  () == 操作符重载 invoke操作符method01.invoke() // 调用函数val method02 = { "我是method02函数" }println(method02())val method03 = {str: String -> println("你传递进来的值是:$str")}method03("jin")val method04 = {number1: Int, number2:Int -> number1.toString() + number2.toString()}println(method04(1, 2))val method05 = {number1: Int, number2:Int -> number1 + number2}println(method05(1, 2))val method06 : (Int) -> String // 先声明method06 = fun(value: Int) : String = value.toString() // 后实现println(method06(88))// 用 先声明 后实现 来 自动推断val method07 : (Int) -> String // 先声明method07 = fun(value) = value.toString() // 后实现println(method07(99))// 声明 + 实现 一气呵成val method08: (Int) -> String /*左边的是声明*/         /*右边是实现*/ = {value-> "$value aaa" }println(method08(77))val method09 : (String, String) -> Unit  = {aStr, bStr -> println("aStr:$aStr, bStr:$bStr") }method09.invoke("AA", "BB")val method10 : (String) -> Unit = { /*it ->*/ // 如果你只有一个参数的话,如果你不写,默认就有it,他会自动给你增加itprintln("你传递进来的值是:$it")}method10("李元霸")val method11 : (Int) -> Unit = {when(it) {1 -> println("你传递进来的是一") // Unitin 20..60 -> println("你传递的是 20 到 60 之内的数字") // Unitelse -> println("都不满足") // Unit}}method11(60)val method11s : (Int) -> String = {when(it) {1 -> "你传递进来的是一" // Stringin 20..60 -> "你传递的是 20 到 60 之内的数字" // Stringelse -> "都不满足" // String}}println(method11s(60))// _ 拒收,可以提高一点点性能val method13 : (Int, Int) -> Unit = {_, number2->println("你传递的第二个参数是:$number2")}method13.invoke(100, 200) // 用户对 不用修改// (Any) -> Anyval method14 = {str: Any -> str}println(method14(true))println(method14(57.654f))val method15 /*: (Char) -> Unit*/ ={sex : Char -> println(if (sex == '男') "你是男生" else if (sex == '女') "你是女生" else "未知") }method15.invoke('男')// (Int) -> Unitvar method16 = {number: Int -> println("你的值是:$number")} // 被覆盖后,就失效了// 覆盖method16, 虽然你覆盖了,类型还是 (Int) -> Unitmethod16 = { println("覆盖的也能拿到值:$it") }method16(999)val method16ss : (String ? /*= ""*/, String) -> Unit = {str /*= "default"*/, str2->println("str:$str, str2:$str2")}method16ss("李元霸", "李连杰")method16ss(null, "李连杰")// 需求:你传入什么,我就打印什么 并且输出// (Any) -> Anyval method17 = {str: Any ->println("你传递了:$str")str // lambda最后一行作为返回值}println(method17(34534))println(method17('C'))println(method17("DDDD"))// 给String增加 匿名扩展函数val method19 : String.() -> Unit = {// this == String本身 == 调用者本身 == "DDD"println("你是$this")}"DDD".method19()val method20 : Int.(Int) -> String = { "两数相加的结果是:${this + it}" }println(1.method20(100))println(method20(1, 100))val method21 : Double.(Double, Double) -> Unit = {d1, d2 -> println("三数相加:${this + d1 + d2}")}method21.invoke(55.5, 66.6, 77.7)55.5.method21(66.6, 77.7)val method22 : Char.(String) -> Unit= { println(if (this == '男') "先生你好" else if (this == '女') "女生你好" else it)}'男'.method22("未知人类")'A'.method22("未知人类")fun Char.method23(default: String) {println(if (this == '男') "先生你好" else if (this == '女') "女生你好" else default)}'男'.method23("未知人类")'A'.method23("未知人类")// TODO 我们前面一直在玩输入,   现在我们开始玩输出(返回类型)fun t01() { println(1) } // 默认Unit,除非我们指定类型fun t02() {4646.5f} // 默认Unitfun t03() {true} // 默认Unitfun t04() : String {return "Derry"} // 指定Stringfun t05() : Int { return 99} // 指定Intfun s01() = {} // () -> Unit    函数返回一个函数fun s02() = { println("OK")} // () -> Unit    函数返回一个函数s02()()fun s03() : Char = run { 'A' } // Char  run返回 {}里面的函数返回类型fun s04() : () -> Boolean = { true } // () -> Boolean 函数返回一个函数println(s03())println(s04()())}// public static
// 给String增加 具名的shows扩展函数
fun String.shows() {// this == String本身 == 调用者本身 == "DDD"println("你是$this")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火焰图的基本认识与绘制方法

火焰图的认识与使用-目录 火焰图的基本认识火焰图有以下特征(on-cpu)火焰图能做什么火焰图类型On-CPU 火焰图和Off-CPU火焰图的使用场景火焰图分析技巧 如何绘制火焰图生成火焰图的流程1.生成火焰图的三个步骤 安装火焰图必备工具1.安装火焰图FlameGraph脚本2.安装火焰图数据采…

智能优化算法应用:基于人工水母算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于人工水母算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工水母算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工水母算法4.实验参数设定5.算法结果6.参考…

4 STM32MP1 Linux系统启动过程

1. ROM代码 这是ST官方写的代码,在STM32MP1出厂时就已经烧录进去,不能被修改。ROM代码是上电以后首先执行的程序,它的主要工作就是读取STM32MP1的BOOT引脚电平,然后根据电平来判断当前启动设备,最后从选定的启动设备里…

快速认识,后端王者语言:Java

Java作为最热门的开发语言之一,长居各类排行榜的前三。所以,就算你目前不是用Java开发,你应该了解Java语言的特点,能用来做什么,以备不时之需。 Java 是一种高级、多范式编程语言,以其编译为独立于平台的字…

快手数仓面试题附答案

题目 1 讲一下你门公司的大数据项目架构?2 你在工作中都负责哪一部分3 spark提交一个程序的整体执行流程4 spark常用算子列几个,6到8个吧5 transformation跟action算子的区别6 map和flatmap算子的区别7 自定义udf,udtf,udaf讲一下…

Java链接数据库

本文介绍的是Java链接数据库中的JDBC操作,JDBC虽然现在用的不多,但面试的时候会问道。需要有相应的了解。下面以链接MySQL为例子。 JDBC 什么jdbc Java DataBase Connectivity是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和…

初识Protobuf与Protobuf的安装

目录 一、Protobuf 1.回顾序列化 2.Protobuf的特性 3.Protobuf的下载 ①ProtoBuf 在 window 下的安装 ②ProtoBuf 在 Linux 下的安装 一、Protobuf 1.回顾序列化 我们在先前的学习中也遇到过序列化。所谓序列化我的理解是,将复杂的对象以特定的方式转换以便于…

【计算机网络笔记】物理层——信道与信道容量

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

【稳定检索|投稿优惠】2024年光电信息与机器人发展国际会议(ICOIRD 2024)

2024年光电信息与机器人发展国际会议(ICOIRD 2024) 2024 International Conference on Optoelectronic Information and Robot Development(ICOIRD 2024) 一、【会议简介】 信息技术与人工智能的浪潮正在激荡,不断刷新我们生活的页面,深刻烙印在光电信息…

Homework 3: Higher-Order Functions, Self Reference, Recursion, Tree Recursion

Q1: Compose 编写一个高阶函数composer,它返回两个函数func和func_adder。 func是一个单参数函数,它应用到目前为止已经组合的所有函数。这些函数将首先应用最新的函数(参见doctests和示例)。 func_adder用于向我们的组合添加更多…

虚拟局域网(VLAN)解析(Virtual Local Area Network)(用于在不受物理位置限制的情况下将设备划分到同一网络或不同网络)

文章目录 虚拟局域网(VLAN)解析1. VLAN简介2. VLAN工作原理3. VLAN类型1. 静态VLAN2. 动态VLAN 4. VLAN优点提高安全性降低网络拥堵更简单的管理 5. 如何配置VLAN1. 进入全局配置模式2. 创建VLAN并命名3. 将端口分配给VLAN4. 验证VLAN配置 6. 常见问题与…

“快慢指针”思想在物理或者逻辑循环中的应用

1 基础概念 1.1 什么是物理循环和逻辑循环? 物理循环是指物理索引访问顺序上相邻,逻辑上也相邻,比如循环链表,逻辑循环则指物理的索引上不一定相邻 1.2 快慢指针本质上可以解决逻辑循环问题,而物理循环也属于逻辑循…

用AI在抖音直播做姓氏头像的全新玩法,详细分析制作教程

前段时间在圈子里给大家分享了用AI写艺术字做小红书账号案例玩法,同学们都比较热衷学习。纷纷动手实践。 事实上用AI艺术字变现玩法还有许多。 例如上周末在星球给圈友们分享的一个AI艺术字直播的抖音账号,直播内容形式很简单,就是展现用AI…

七大经典高效学习方法

金字塔学习模型 金字塔学习是美国学习专家爱德加戴尔1946年提出的。 他将学习分为主动学习和被动学习两种类型,用数字形象地呈现了采用不同学习方式,学习者在两周后还能记住的内容有多少。 被动学习:通过听讲、阅读、视听、演示这些活动&a…

Java网络编程——基础入门

1、进程间的通信 进程指运行中的程序,进程的任务就是执行程序中的代码。EchoPlayer类是一个独立的Java程序,它可以在任意一台安装了JDK的主机上运行: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

Linux socket编程(11):Unix套接字编程及通信例子

Unix套接字是一种用于在同一台计算机上的进程间通信的一种机制。它是Linux和其他类Unix系统中的一项特性,通过在文件系统中创建特殊的套接字文件,进程可以通过这些套接字文件进行通信。 文章目录 1 Unix和TCP套接字对比2 Unix套接字初始化流程3 例:服务端…

3.4 路由器的DHCP配置

实验3.4 路由器的DHCP配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施(一)配置基于接口地址池的DHCP1.交换机的基本配置2.路由器的基本配置3.开启路由器的DHCP服务器功能4.配置路由器接口的DHCP功能5.设置计算机使用DHCP方式获取IP地…

DS图应用--最短路径

Description 给出一个图的邻接矩阵,再给出指定顶点v0,求顶点v0到其他顶点的最短路径 Input 第一行输入t,表示有t个测试实例 第二行输入n,表示第1个图有n个结点 第三行起,每行输入邻接矩阵的一行,以此类…

Hello World!

一、minist数据集 深度学习编程特有的hello world程序:采用minist数据集完成意向特定深度学习项目 1、minist数据集介绍 MNIST数据集是一个广泛使用的手写数字识别数据集,它包含了许多不同人手写的数字图片。这个数据集被广泛用于研究手写数字识别&…

通过keepalived+nginx实现 k8s apiserver节点高可用

一、环境准备 K8s 主机配置: 配置: 4Gib 内存/4vCPU/60G 硬盘 网络:机器相互可以通信 k8s 实验环境网络规划: podSubnet(pod 网段) 10.244.0.0/16 serviceSubnet(service 网段): 1…