林子雨-2.4 函数式编程基础

目录

 

1、函数的定义与使用

定义

字面量

匿名函数

_

2、高阶函数

定义

3、针对容器的操作 (遍历、映射)

scala容器的标准遍历方法foreach

map

flatmap

4、过滤和规约

过滤

规约

reduce

fold

5、spark编程实例WordCount


1、函数的定义与使用

定义

函数==方法(见2.3)

字面量

林子雨-2.4 函数式编程基础

函数也有函数字面量

函数式编程的实质:函数和整型一样,可以在不同的方法调用中操作,传递。

林子雨-2.4 函数式编程基础

传入参数为value

林子雨-2.4 函数式编程基础

函数值为counter

函数也有类型和值的概念。

林子雨-2.4 函数式编程基础

但不是每个函数都需要给其命名(给函数值),因为用一次就不用了。

这时候就考虑使用匿名函数(Lambda表达式)

匿名函数

没有函数名称,可以直接放到方法的括号里面作为参数传入。

林子雨-2.4 函数式编程基础

(参数) => 表达式

如果参数只有一个,圆括号可以省略

实例:

匿名函数可以赋值给函数类型的变量。

Int => Int 表示所声明的函数的类型

林子雨-2.4 函数式编程基础

自动推断机制:不用写出函数的类型

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

_

一个下划线只能表示一个参数的一次出现

实例:

林子雨-2.4 函数式编程基础

spark代码很喜欢使用_

2、高阶函数

定义

函数括号里的参数仍然是函数

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

3、针对容器的操作 (遍历、映射)

scala容器的标准遍历方法foreach

林子雨-2.4 函数式编程基础

List:

林子雨-2.4 函数式编程基础

Map:

林子雨-2.4 函数式编程基础

中缀表示法

林子雨-2.4 函数式编程基础

._1与._2:取元组或映射中的对象

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

x为map中的键值对映射;

case(k,v):(k,v)就是一个元组对象(结构)

tuple=(1,2,3) //自动认为tuple是元组结构

未简写

简写

林子雨-2.4 函数式编程基础

map

对容器或集合中的元素进行一对一的映射

scala的容器或集合中都自带有map方法

map()括号中的语句为lambda函数

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

flatmap

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

4、过滤和规约

过滤

林子雨-2.4 函数式编程基础

圈起来的部分为lambda表达式

林子雨-2.4 函数式编程基础

规约

reduce

没有初始值

接受二元函数f为reduce的参数

林子雨-2.4 函数式编程基础

规约实质

林子雨-2.4 函数式编程基础

左规约与右规约:

林子雨-2.4 函数式编程基础

fold

有初始值

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础

5、spark编程实例WordCount

林子雨-2.4 函数式编程基础

林子雨-2.4 函数式编程基础