Kotlin基础 7

1.apply函数详解  

1.1. DSL

/*** 为什么要传入扩展函数(泛型),而不是一个普通的匿名函数* T.()->Unit* 扩展函数里自带了接收者对象的this隐式调用* 为什么是泛型的扩展函数?* 因为是由this 隐式调用 this 类型就是泛型类型, 相当于this的扩展函数,就把this的作用域放进去了.** 匿名函数,也可以是扩展函数***/

2.函数式编程

 3.变换函数

3.1 map函数

 

fun main() {val animals:List<String> = listOf("zebra", "giraffe", "elephant", "rat")val map:List<String> = animals.map { animals -> "A baby $animals" } //相当于stream流 map 然后自动collectListprintln(animals)//不会改变原来的集合println(map)
}

 3.2 flapMap

fun main() {val flatMap =listOf(listOf(1, 2, 3), listOf(4, 5, 6, 7, 8, 9)).flatMap { it -> it.map { it + 1 } } //flatMap是合并泛型里同类型的集合println(flatMap)}

3.3 filter

和Java一样,不需要过多重复

3.4 合并函数

zip

fun main() {val employees = listOf("Jack", "Rose", "Jason")val shirtSize = listOf("red", "green", "yellow")val map:Map<String,String> = employees.zip(shirtSize).toMap()println(map)
}

fold

 

fun main() {//将每个元素乘以三叠加起来val fold = listOf(1, 2, 3, 4).fold(0) { acc, i ->println("acc = $acc")acc + (i * 3)}println("sum = $fold")}

4.序列

none 是 若有一个为 true 则为false ,全为false 则为true


fun Int.isPrime():Boolean{( 2 until this).map {if (this % it == 0){return false}}return true
}fun main() {//假定0-5000之内,可以找到1000个素数val toList = (1..5000).toList().filter { it.isPrime() }.take(1000)//take 拿去前1000个println(toList)//就是不知道有多少个可变的序列val oneTousandPrimes = generateSequence(2) { v ->v + 1}.filter { it.isPrime() }.take(1000)println(oneTousandPrimes.toList().size)}

 5. Java与Kotlin互操作性和可空性

package javahuixangfun main() {val adversary = Jhava()val determineGreeting = adversary.determineGreeting()//String! 平台类型  有可能会有空指针 ,需要处理一下println(determineGreeting?.toLowerCase())
}
package javahuixang;public class Jhava {public String utterGreeting(){return "Hello";}public String determineGreeting(){return null;}}

6.类型映射

package javahuixang;public class Jhava {public int hitPoints = 3322;public String utterGreeting(){return "Hello";}public String determineGreeting(){return null;}}
package javahuixangfun main() {val jhava = Jhava()println(jhava.hitPoints.javaClass)
}

7.属性访问

 

package javahuixangfun main() {val jhava = Jhava()println(jhava.hitPoints)
}
package javahuixang;public class Jhava {private int hitPoints = 3322;public String utterGreeting(){return "Hello";}public String determineGreeting(){return null;}public int getHitPoints() {System.out.println("get");return hitPoints;}public void setHitPoints(int hitPoints) {this.hitPoints = hitPoints;}
}

8.Java调用kotlin

package javahuixangfun main() {val adversary = Jhava()val determineGreeting = adversary.determineGreeting()//String! 平台类型  有可能会有空指针 ,需要处理一下println(determineGreeting?.toLowerCase())
}fun makeProclamation() = "Greetings,beast!"
   public static void main(String[] args) {String s = HeroKt.makeProclamation();System.out.println(s);}

9.@file:JvmName 给kotlin文件起别名

@file:JvmName("Hero")
package javahuixang
fun main() {val adversary = Jhava()val determineGreeting = adversary.determineGreeting()//String! 平台类型  有可能会有空指针 ,需要处理一下println(determineGreeting?.toLowerCase())
}fun makeProclamation() = "Greetings,beast!"
 public static void main(String[] args) {String s = Hero.makeProclamation();System.out.println(s);}

10.@JvmField

package javahuixangclass Spellbook{@JvmFieldval spells = listOf("a","b")}
  public static void main(String[] args) {Spellbook spellbook = new Spellbook();//加了  @JvmField 自动调用 kotlin的get方法 ,给Java提供了Kotlin的语法List<String> spells = spellbook.spells;}

11.@JvmOverload

@JvmOverloads
fun handOverFood(leftHand:String="berries",rightHand:String = "beef"){println("Mmmm... you hand over some delicious $leftHand and $rightHand")
}
 public static void main(String[] args) {//Java要支持 用默认值 得重载Hero.handOverFood();}

kotlin最大的优势就是可以和Java互编

12. @JvmStatic

package javahuixangclass Spellbook{@JvmFieldval spells = listOf("a","b")companion object{@JvmFieldval MX=10@JvmStaticfun getSpellGreeting() = println("i am a good")}}
    public static void main(String[] args) {//Java要支持 用默认值 得重载
//        Spellbook.Companion.getMX();System.out.println(Spellbook.MX);//让JAVA支持kotlin的写法Spellbook.getSpellGreeting();}

类加载就加载出来的,在JVM加载不会有线程安全问题

13.Throws

 Kotlin抛出的异常,让JAVA能够catch到

 想要Java 能够catch kotlin 抛出的异常,必须用 这个注解

@kotlin.jvm.Throws(IOException::class)
fun acceptApology() {throw IOException()
}

Java 

  try {Hero.acceptApology();} catch (IOException e) {System.out.println("catch");}

14.函数类型操作

 Java调用kotlin 匿名函数

val translator= {utterance:String ->println(utterance.toLowerCase().capitalize())
}
    public static void main(String[] args) {Function1<String, Unit> translator = Hero.getTranslator();translator.invoke("TRUCE");}

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

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

相关文章

Aidex移动端项目入门

运行效果 项目源码下载 若依-ruoyi-AiDex-Uniapp: 若依-Ruoyi APP 移动解决方案&#xff0c;基于uniappuView封装的一套基础模版&#xff0c;开箱即用&#xff0c;免费开源&#xff0c;一份代码多终端适配&#xff0c;支持H5、支付宝小程序、微信小程序、APP&#xff0c;实现了…

解决MobaXterm网络错误连接超时问题

报错页面&#xff1a; 报错原因&#xff1a; ①网络断开了 ②网络端口&#xff0c;端口号改变 解决办法&#xff1a; ①重新连接网络按R ②固定端口号 第一步&#xff1a;编辑------>虚拟机网络编辑器&#xff08;我的Linux在虚拟机里&#xff09; 第二步&#xff1a;用…

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…

如何画架构图:从概念到实践

如何画架构图&#xff1a;从概念到实践 免费在线作图工具&#xff0c;点击邀请链接注册赠送7天会员&#xff1a;https://www.processon.com/u/5d3967afe4b0208611113845 在软件开发和系统设计中&#xff0c;架构图是一种重要的工具&#xff0c;它能够帮助开发人员和利益相关者…

嵌入式Qt 计算器核心算法_2

一.中缀表达式转后缀表达式 中缀表达式是最常用的算术表达式形式——运算符在运算数中间。但运算时需要考虑运算符优先级。 ​后缀表达式是计算机容易运算的表达式&#xff0c;运算符在运算数后面&#xff0c;从左到右进行运算,无需考虑优先级,运算呈线性结构。 1 2 * 3// …

打败茅台的“老酒”

作者&#xff1a;翻篇 琥珀酒研社快评&#xff1a; 最可恨的 从来不是什么强大敌人 而是美名其曰的猪队友 要不怎么有网友说 酒鬼酒太惨了 当年要不是败给内鬼 又曝出塑化剂事件 错过白酒发展的黄金十年 不说打败茅台、五粮液 但成为另一个茅台、五粮液 那完全有希…

Vue3_基础使用_4_路由器Router

概念&#xff1a; 路由&#xff1a;是一个key-value的对应关系叫路由。 路由器&#xff1a;管理多个路由的集合或者叫设备称为路由器。 由于现在组件替代了以前的mvc中的cshtml, 组件的菜单切换也不用我手动去写&#xff0c;vue给我们通过配置完成。 实现简单的路由跳转&…

10.vue学习笔记(组件数据传递-props回调函数子传父+透传Attributes+插槽slot)

文章目录 1.组件数据传递2.透传Attributes&#xff08;了解&#xff09;禁用Attributes继承 3.插槽slot 1.组件数据传递 我们之前讲解过了组件之间的数据传递&#xff0c;props 和 自定义事件 两种方式 props&#xff1a;父传子 自定义事件&#xff1a;子传父 props通过额外方…

通过eeprom验证FPGA实现的单字节/页读写IIC接口时序

1、概括 前文设计基于FPGA的IIC接口模块&#xff0c;本文将使用eeprom来验证该模块的设计。为了便于查看读写波形&#xff0c;采用两个按键来控制对eeprom数据的读写&#xff0c;当按键0按下后&#xff0c;FPGA向eeprom的前64个存储地址写入地址对应的数据&#xff0c;当按键1按…

2024 全国水科技大会暨第二届智慧水环境管理与技术创新论坛

论坛二&#xff1a;第二届智慧水环境管理与技术创新论坛 召集人&#xff1a;刘炳义 武汉大学智慧水业研究所所长、教授 为贯彻落实中共中央国务院印发《数字中国建设整体布局规划》和国务院关于印发《“十四五”数字经济发展规划》的通知&#xff0c;推动生态环境智慧治理&…

上海亚商投顾:北向资金净买入超130亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 指数昨日低开高走&#xff0c;三大股指午后均涨超2%&#xff0c;沪指一度逼近3000点关口&#xff0c;尾盘涨幅…

Google发布开放的模型Gemma

今天&#xff0c;Google 发布了一系列最新的开放式大型语言模型 —— Gemma&#xff01;Google 正在加强其对开源人工智能的支持&#xff0c;我们也非常有幸能够帮助全力支持这次发布&#xff0c;并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型&#xff1a; 7B …