偏函数的简写形式 | 学习笔记

简介: 快速学习偏函数的简写形式

开发者学堂课程【Scala 核心编程 - 进阶偏函数的简写形式学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9088


偏函数的简写形式


偏函数简化形式

声明偏函数,需要重新写特质中的方法,有的时候会略显麻烦,而 Scala 其实提供了简单的方法

1、简化形式1代码说明

//只需要声明传入参数的类型和返回参数的类型,直接写 case

def f2:PartialFunction[Any,Int]={

// case 怎样写取决于原先的代码逻辑,匹配上写 i+1,匹配不上不写任何代码,不会异常,在底层做优化

case i:Int=>i+1//case语句可以自动转换为偏函数

}

val list2 = List(1,2,3,4,"ABC").collect(f2)

// isDefinedAt 、 isInstanceOf 和 apply 业务量逻辑可以精简成一句话 case i:Int=>i+1,i 可以随便写如a、b

新建文件 PartialFun03 :

package com.atguigu.chapter13

object PartialFun03{

def main(args: Array[String]): Unit ={

//可以将前面的案例的偏函数简写

def partialFun2 :  PartialFunction[Any,Int]={

//简写成 case 语句

case i:Int =>i + 1

}

val list = List(1,2,3,4,”hello”)

val list2 = list.collect(partialFun2)

println(“list2=” + list2)

}

}

执行:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5)

Process finished with exit code 0

小数形式:

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2:PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

//只有 j * 2 不能转成 Int ,可以写 implicit 来转

case j:Double => (j * 2).toInt

}

val list = List(1, 2, 3, 4, 1.2, 2.4, "hello")

val list2=list.collect(partialFun2)

println("list2="+ list2)

}

}

效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

Process finished with exit code 0

//可以对不同的类型甚至更多的判断进行处理

2、简化形式2代码说明

val list3 = List(1,2,3,4,"ABC").collect{case i:Int=>i+1}

println(list3)

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2: PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

case j:Double => (j * 2).toInt

}val list = List(1, 2, 3, 4, 1.2, 2.4, "hello") val list2=list.collect(partialFun2) println("list2="+ list2)

//第二种简写形式

val list3 = list.collect{

case i:Int => i+1

case j:Double => (j*2).toInt

}

println(“list3=”+list3)//(2,3,4,5)

}

}

运行效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

list3=List(2,3,4,5)

Process finished with exit code 0

加入 1.9f:

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2: PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

case j:Double => (j * 2).toInt

}val list= List(1,2,3, 4, 1.2, 2.4, 1.9f,"hello") val list2=list.collect(partialFun2) println("list2="+ list2)

//第二种简写形式

val list3 = list.collect{

//偏函数的处理

case i:Int => i+1

case j:Double => (j*2).toInt

//最好换一个名字

case k:Float => (k*3).toInt

}

println(“list3=”+list3)//(2,3,4,5)

}

}

运行效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

list3=List(2,3,4,5,2,4,5)

Process finished with exit code 0

相关文章
|
弹性计算 负载均衡 算法
云:SLB介绍
指标及功能
496 0
|
8月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
SQL 网络安全 数据库
机房电脑下载并安装SQL Server的详细步骤
在机房电脑上下载并安装SQL Server是一个常见的任务,特别是对于学习数据库管理或进行相关项目开发的学生和开发者来说
|
编解码 供应链 搜索推荐
虚拟现实与教育:沉浸式学习的潜力
【10月更文挑战第2天】虚拟现实(VR)技术正在革新教育领域,通过沉浸式体验提升学习效果和兴趣。本文探讨了VR在教育中的应用潜力,特别是在历史、地理、自然科学和语言教育中的案例。虽然面临设备成本和技术支持等挑战,但随着技术进步和成本降低,VR有望成为教育的重要工具,带来更丰富的学习体验。
|
JavaScript 前端开发 安全
TypeScript(TS)安装指南与基础教程学习全攻略(一)
TypeScript(TS)安装指南与基础教程学习全攻略(一)
393 0
|
机器学习/深度学习 自然语言处理 算法
什么是数据集的分类?
【7月更文挑战第10天】什么是数据集的分类?
2128 1
|
机器学习/深度学习 数据可视化
数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据
数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据
|
SQL 关系型数据库 MySQL
PowerDesigner16.5逆向工程导入
本文介绍了如何通过现有数据库或SQL将数据逆向导入PowerDesigner。首先,需下载并安装PowerDesigner 16.5(32位),并通过指定链接获取软件及教程。接着,安装对应的MySQL ODBC驱动,配置ODBC数据源。最后,在PowerDesigner中通过文件>反向工程>database选项导入数据库。若环境不匹配,可直接导入SQL脚本文件。文中提供了详细步骤与截图指导。
651 0
|
前端开发 JavaScript API
告别繁琐!AJAX与Fetch API,让你的前后端沟通畅通无阻,项目效率飙升!
在Web开发中,前后端的顺畅沟通至关重要。传统方法常需频繁刷新页面,影响体验与效率。AJAX和Fetch API的出现简化了这一过程。AJAX利用XMLHttpRequest实现局部页面更新,提升用户体验;Fetch API则以更简洁的语法和强大的功能,进一步优化异步请求处理。两者均能显著提高开发效率,简化代码结构,让项目迭代更快速。拥抱这些技术,让Web开发之路更加顺畅。
178 0
|
网络协议
选择长连接 or 短连接,大量 Timewait 的产生时如何处理?
网络通讯中,常见的两个连接类型分别是长连接和短连接。长连接指在一定时间内保持连接不断开,而短连接则指每次连接只进行一次通信,通信结束后即时断开连接。在实际应用中,不同类型的连接有着不同的应用场景和优缺点,而且在网络通讯中可能会遇到大量 Timewait 的产生,这就需要针对不同情况选择不同的处理方案。
428 1