大数据系列修炼-Scala课程07
由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去!
关于Scala高阶函数详解
1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数
2.高阶函数代码详解:高阶函数能够让方法的调用更加便捷
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
//(1 to 9)数组中的map方法向数组中放* 用foreach用于来循环 println _ 表示函数,把函数当做参数进行传递
(1 to 9).map("*" * _).foreach(println _) //> *
//| **
//| ***
//| ****
//| *****
//| ******
//| *******
//| ********
//| *********
//过滤后被2整除的遍历 println也当做参数进行传递这就是高阶函数
(1 to 9).filter(_ % 2 == 0) .foreach(println) //> 2
//| 4
//| 6
//| 8
//_*_代表数组中两个数据相乘 也属于高阶函数
println((1 to 9).reduceLeft(_ * _)) //> 362880
//把字符串用空格分割在按照长度排序
"Spark is the most exciting thing happening in big data today".split(" ").
sortWith(_.length < _.length).foreach(println)
//> is
//| in
//| the
//| big
//| most
//| data
//| Spark
//| thing
//| today
//| exciting
//| happening
//ceil函数表示向上取值
val fun = ceil _ //> fun : Double => Double = <function1>
val num = 3.14 //> num : Double = 3.14
fun(num) //> res0: Double = 4.0
Array(3.14, 1.42, 2.0).map(fun)//fun函数当做函数传递 //> res1: Array[Double] = Array(4.0, 2.0, 2.0)
//函数表示三的倍数
val triple = (x: Double) => 3 * x //> triple : Double => Double = <function1>
Array(3.14, 1.42, 2.0).map((x: Double) => 3 * x)
//> res2: Array[Double] = Array(9.42, 4.26, 6.0)
Array(3.14, 1.42, 2.0).map{ (x: Double) => 3 * x }
//> res3: Array[Double] = Array(9.42, 4.26, 6.0)
//定义高阶函数
def high_order_functions(f: (Double) => Double) = f(0.25)
//> high_order_functions: (f: Double => Double)Double
println(high_order_functions(ceil _)) //> 1.0
println(high_order_functions(sqrt _)) //> 0.5
//函数相乘
def mulBy(factor: Double) = (x: Double) => factor * x
//> mulBy: (factor: Double)Double => Double
val quintuple = mulBy(5) //> quintuple : Double => Double = <function1>
println(quintuple(20)) //> 100.0
//3的倍数解析
println(high_order_functions((x: Double) => 3 * x))
//> 0.75
high_order_functions((x) => 3 * x) //> res4: Double = 0.75
high_order_functions(x => 3 * x) //> res5: Double = 0.75
println(high_order_functions(3 * _)) //> 0.75
val fun2 = 3 * (_: Double) //> fun2 : Double => Double = <function1>
val fun3: (Double) => Double = 3 * _ //> fun3 : Double => Double = <function1>
Scala中SAM转换讲解
1.SAM的意义:隐式的转换
2.SAM转换详解
var data = 0
val frame = new JFrame("SAM Testing");
val jButton = new JButton("Counter")
jButton.addActionListener(new ActionListener {
override def actionPerformed(event: ActionEvent) {
data += 1
println(data)
}
})
//隐式函数就把一些函数定义,好比java中的函数定义模块-->这就可以隐式转换
implicit def convertedAction(action: (ActionEvent) => Unit) =
new ActionListener {
override def actionPerformed(event: ActionEvent) { action(event) }
}
//这样是写代码的时候只关心业务逻辑,没有必要去编写没有关系的代码,直接写所需的结果
jButton.addActionListener((event: ActionEvent) => {data += 1; println(data)})
//这跟java中的gui编程一样
frame.setContentPane(jButton);
frame.pack();
frame.setVisible(true);
Scala中curring讲解
1.curring的定义:curring颗粒度,就是把参数简化成一个参数进行操作,返回后把另外进行计算
2.curring在项目中重要性:在公式的推到中和计算中相当重要
//curring颗粒度,就是把参数简化成一个参数进行操作,返回后把另外进行计算
def multiple(x: Int, y: Int) = x * y
def multipleOne(x: Int) = (y: Int) => x * y
println(multipleOne(6)(7))
//可以把以上的计算方式该项为下面的方法
def curring(x: Int)(y: Int) = x * y println(curring(10)(10)) val a = Array("Hello", "Spark")
val b = Array("hello", "spark")
//比较两个变量的是否相等
println(a.corresponds(b)(_.equalsIgnoreCase(_)))
Scala中模式匹配入门讲解
1.模式匹配分析:Scala中匹配模式比较灵活,可以传入参数和函数等
2.在模式匹配中使用守卫:接下的blog中会深入讲解
3.模式匹配中的变量使用
//模式匹配在java中用switch来表示,这里面限制不是很多,int,byte,char,short
val data =2
data match {
case 1 => println("First")
case 2 => println("Second")
case _ => println("Not Known Number")
}
//Scala中case中可以用条件函数也可以是函数,也可以传参数
val result = data match {
case i if i == 1 => "The First"
case number if number ==2 => "The Second" + number
case _ => "Not Known Number"
}
println(result)
"Spark !" foreach { c => println (
c match {
case ' ' => "space"
case ch => "Char: " + ch
}
)}
这就是拖欠任务,今天会再写一篇关于Scala的学习!希望大家关注王家林老师的微信(18610086859),他会每天都更新大数据的视频!
最新大数据视频74讲:http://pan.baidu.com/s/1hqJByvU
本文百度云地址23-26讲:http://pan.baidu.com/s/1bOsSQ
大数据系列修炼-Scala课程07的更多相关文章
- 大数据系列修炼-Scala课程01
简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 大数据系列修炼-Scala课程06
关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...
- 大数据系列修炼-Scala课程04
Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...
- 大数据系列修炼-Scala课程08
接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...
- 大数据系列修炼-Scala课程02
Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...
- 大数据系列修炼-Scala课程11
接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...
- 大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...
- 大数据系列修炼-Scala课程05
Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...
随机推荐
- Android 深入解析光传感器(二)
光线传感器演示1 讲了一大堆的理论,那么以下的样例就来展示一下光线感应器的使用.为什么充分展现光感的用法,我这个样例写的很easy,仅仅写了使用光感必须的代码,然后用了几个textVie ...
- [渣译文] SignalR 2.0 系列: 支持的平台
原文:[渣译文] SignalR 2.0 系列: 支持的平台 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP. ...
- 玩转Web之Json(二)----jquery easy ui + Ajax +Json+SQL实现前后台数据交互
最近在学Json,在网上也找过一些资料,觉得有点乱,在这里,我以easy ui的登录界面为例来说一下怎样用Json实现前后台的数据交互 使用Json,首先需要导入一些jar包,这些资源可以在网上下载到 ...
- hdu 4876 ZCC loves cards(暴力)
题目链接:hdu 4876 ZCC loves cards 题目大意:给出n,k,l,表示有n张牌,每张牌有值.选取当中k张排列成圈,然后在该圈上进行游戏,每次选取m(1≤m≤k)张连续的牌,取牌上值 ...
- UVA580-Critical Mass
题目链接 题意:一个栈中仅仅能放入U和L,问存在连续3个以上U(危急组合)的个数为几个 思路:用总组合数-安全组合=危急组合.d[i]表示第i个位置以L结束的序列,所以就有d[i] = d[i - 1 ...
- 【YouVersion】 The Bible 圣经App
[YouVersion] The Bible 圣经 App 今天向大家郑重推荐一款非常棒的圣经App : <The Bible> YouVersion 团队开发的全球下载量和安装数目第 ...
- 【007】【JVM——内存分配和恢复策略】
内存分配与收回策略 JVM的自己主动内存管理要自己主动化地解决两个问题:对象分配内存以及回收分配给对象的内存.回收内存前几篇已经讲了.如今说内存分配.对象的内存分配一般分配在堆内存中,也可能经过 ...
- JDBC调用存储过程
一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...
- 大约Android 了解权限管理
如Android应用程序开发人员.为android权限机制一直觉得很奇怪.为什么要这个东西权限?为什么要AndroidManifest里面写的uses-permission 这样的事情?我一直搞不清楚 ...
- Cocos2d-x Auto-batching 浅浅的”深入分析”
Auto-batching是Cocos2d-x3.0新增的特性,目的是为了代替SpriteBatchNode,完毕渲染的批处理,提高绘制效率. 至于它有什么特点,能够看看官方文档,这里主要想探讨Aut ...