偏函数的快速入门和小结 | 学习笔记

简介: 快速学习偏函数的快速入门和小结

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

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


偏函数的快速入门和小结


内容介绍:

一、偏函数的基本介绍

二、偏函数快速入门

三、偏函数的小结


一、偏函数的基本介绍

基本介绍

1)在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择(执行某一个函数时,先要满足某个条件)

2)将包在大括号内的一组 case 语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范围值的参数实施计算,超出范围的值会忽略(未必会忽略,这取决于你打算怎样处理)

3)偏函数在 Scala 中是一个特质 PartialFunction(偏函数会继承 PartialFunction )


二、偏函数快速入门

使用偏函数解决前面的问题,【代码演示+说明】

val list = List(1, 2, 3, 4, "abc")

//说明

val addOne3= new PartialFunction[AnyInt]{def isDefinedAt(any:Any) = if(any.isInstanceOf[Int]) true else false

def apply(any: Any)=any.asInstanceOf[Int]+1

}

val list3 = list.collect(addOne3)

println("list3="+list3)//?

写代码:

PartialFunctionDemo02

package com.atguigu.chapter13

object PartialFunDemo02{

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

//使用偏函数解决

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

//定义一个偏函数

//点击apply(v1:T1):R

//1. PartialFunction[Any,Int] 表示偏函数接收的参数类型是Any,返回类型是Int

//2. isDefinedAt(x: Any) 如果返回 true ,就回去调用 apply 构建对象实例,如果是 flase ,滤掉

//3. apply 构造器对传入的值 + 1,并返回(新的集合)

val partialFun= new PartialFunction[Any,Int]{

//if x.isInstanceOf[Int] true else false→x.isInstanceOf[Int]

override def isDefinedAt(x: Any) ={

println(“x=”+x)

x.isInstanceOf[Int]

}

override def apply(v1: Any) = {

println(“v1=”+v1)

v1.asInstanceOf[Int] + 1

}

}

//使用偏函数

//说明:

如果是使用偏函数,则不能使用 map ,应该使用 collect , map 没有过滤

//说明一下偏函数的执行流程

//1.遍历 list 所有元素

//2.然后调用 val ele = if(partialFun-isDefinedAt( list 单个元素)){partialFun-apply ( list 单个元素)}

//3.每得到一个 element,放入到新的集合,最后返回

val list2 = list.collect(partialFun)

println(“list2”+list2)

}

}

执行:

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

list2List(2,3,4,5)

Process finished with exit code 0

v1执行效果:

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

x=1

v1=1

x=2

v1=2

x=3

v1=3

x=4

v1=4

X=hello

list2List(2,3,4,5)

Process finished with exit code 0


三、偏函数的小结

val addOne3= new PartialFunction[AnyInt] (

def apply(any:Any) = any.asInstance0f[Int]+1def isDefinedAt(any: Any) = if (any.isInstanceOf[Int]) true else false

}

1)使用构建特质的实现类(使用的方式是 PartialFunction 的匿名子类)

2)PartialFunction 是个特质(看源码)

3)构建偏函数时,参数形式 [Any,Int] 是泛型,第一个表示参数类型,第二个表示返回参数

4)当使用偏函数时,会遍历集合的所有元素,编译器执行流程时先执行 isDefinedAt(),如果为true,就会执行 apply 构建一个新的 Int 对象返回

5)执行 isDefinedAt() 为 false 就过滤掉这个元素,即不构建新的 Int 对象

6) map 函数不支持偏函数,因为 map 底层的机制就是所有循环遍历,无法过滤处理原来集合的元素

7) collect 函数支持偏函数

相关文章
|
Ubuntu Shell 开发工具
Ubuntu 20.04 配置 zsh
Ubuntu 20.04 配置 zsh
986 0
Ubuntu 20.04 配置 zsh
|
编解码 图形学 Android开发
|
算法 搜索推荐 Java
解析01背包问题及其在动态规划中的应用
解析01背包问题及其在动态规划中的应用
|
传感器 算法 机器人
基于 IMU 的位姿解算
解算 IMU 采样数据的过程与惯导解算技术原理有关,而提高定位精度的方法主要依赖于IMU自身精度的提高和算法改进。
2122 0
|
机器学习/深度学习 自然语言处理 固态存储
卷积神经网络CNN入门篇——形成、演变及其应用和影响。
卷积神经网络最初是受到视觉系统的神经机制启发、针对二维形状的识别设计的一种生物物理模型,在平移情况下具有高度的不变形,在缩放和倾斜情况下也具有一定的不变形。这种生物物理模型集成了“感受野”的思想,可以看作一种特殊的多层感知器或者前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。
卷积神经网络CNN入门篇——形成、演变及其应用和影响。
|
机器学习/深度学习 算法 数据挖掘
【MATLAB】mlptdenoise分解+FFT+HHT组合算法
【MATLAB】mlptdenoise分解+FFT+HHT组合算法
195 0
【MATLAB】mlptdenoise分解+FFT+HHT组合算法
|
Linux 数据安全/隐私保护 Windows
Linux权限基础知识
Linux权限基础知识
|
算法 调度
转:贪心算法在文档管理系统中的优势、误区及应用
贪心算法是一种基于贪心策略的算法,其基本思想是在每一步选择中都采取当前最优的选择,以期望得到全局最优解。然而,贪心算法不一定能得到全局最优解,它可能在某些情况下陷入局部最优解,因此在应用中需要谨慎选择。
240 1
|
安全 算法 测试技术
数据安全最佳实践(1):数据研发链路上的数据安全保护
数据安全作为合规管控的管理诉求,必然会对数据的使用和开发造成影响,我们下面简单看下以下两个场景:代码查询、生产数据写开发环境/测试环境数据准备。
数据安全最佳实践(1):数据研发链路上的数据安全保护