门清Scala高阶函数

本文深入探讨Scala中的高阶函数,尤其是foldLeft和foldRight的用法,通过实例解释它们的区别。同时,文章还涵盖了Scala中的类、抽象类、伴生类与对象、this的多种用途等核心概念,旨在帮助读者更好地理解和运用Scala。
摘要由CSDN通过智能技术生成

门清

Scala高阶函数,函数是Scala中最重要的重点

把函数体看成变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FaSO5MIc-1569812863336)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569307872942.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWZN2ufZ-1569812863338)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569308182740.png)]

工厂方法 工厂变量 简单工厂

object MyhHello {
  //高阶函数最简单的工厂模式
  var humber = ()=>{
    //可以连接数据库,HBase,masql等等
    "我是汉堡包"
  }
  var checken = ()=> "我是鸡翅膀"

  def  kgc(foodname:String):()=>String = foodname match {
    case "humber" => humber
    case "cheken" => checken
    case  _=> null
  }

  def main(args: Array[String]): Unit = {
      println(kgc("cheken")())
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3VKYtja-1569812863340)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569314418168.png)]

用高阶函数解决问题

为什么用设计模式–高内聚,低耦合,提高程序的健壮性,—2,3个模式最优的方法。

接口下面是具体的类,了多个类聚合在一起就合成了接口。(预埋接口,使用接口)好的设计模式会很优美。用工厂模式限制接口类型。

离散数学,

二维数组压平就变成了一维数组(变形的测试图)

reduce函数:两两相加,

Java方法重载 名字一样,参数类型不一样,方法名不能一样。 《柯里化 》
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWOUdzia-1569812863341)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569316272057.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCDYIoqx-1569812863342)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569316296661.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIFzvOR6-1569812863342)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569316449504.png)]

scala:Array(集合,序列)

Scala高阶函数数组中 左子树,右子树奇数个 完整二叉树偶数 底层都是二叉树,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0taFnQb7-1569812863344)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569318876847.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zgHWzMzC-1569812863346)(C:\Users\tt\AppData\Roaming\Typora\typora-user-images\1569318963015.png)]

秒懂)图解scala的foldleft和foldright

foldLeft:

比如

List(1,7,2,9).foldLeft(0)(-)

其中0是初始值
一般情况下对于foldLeft可以这么解决:0-1-7-2-9 = -19
还可以画一个图(别吐槽):
在这里插入图片描述
本栗子的操作就是_-_,也就是各元素相减,所以我们从底端开始就得到(((0-1)-7)-2)-9= -19

foldRight

骚微变一下初值

List(1,7,2,9).foldRight(7)(-)

这个就比foldLeft复杂一点了,萌新就不能一眼看出结果了,那么我们可以一样的画个图(好累):
在这里插入图片描述
这个的话就要从下面看了,
先是(9-7)
然后 2 -(9-7)
然后7-(2-(9-7))以此类推得到
1-(7-(2-(9-7))) = -6
其他的情况也可以以此类推
对就是这样,同学们理解了吗
上面的函数比较丰富:

scala> val fun1:PartizlFunction[Any,Int]={case i:Int=>i*2}
scala> arr1
     :Array[Any] = Array(1,2,3,6,abc)
scala> arr1.collect(fun1)
	 :Array[Int] = Array(2,4,6,12) 
arr.collect()表示偏函数里面的过滤你想要的数据
柯里化,左子树,右子树,Hash分区等对应的函数

样例类,

流处理,批处理。

???????????

偏函数:对部分函数进行处理,附楼木配置文件怎么贴,卡夫卡是什么?Java多线程,上锁死锁,Java虚拟机怎么弄。java写设计模式,Scala写设计模式,简单工厂,单例模式,

9.25///偏函数:

类(class)

搜搜移动大厅练习,通过class关键字定义默认成员类为public,也支持private,protected

java 类,伴生类与伴生对象(动态/静态相互转换)

一个类里面既要成员方法又要静态方法,则使用样例类 ,伴生对象与伴生类

在Scala中有两

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值