JIANGzihao0222

导航

 

  将Scala剩下的函数式编程进行学习

函数式编程

函数字面量

123:整数自变量

1.23 浮点数自变量

'A' 字符自变量

...

函数自变量:定义一个变量一般去定义一个函数,使得函数也像其他自变量一般有了值,同样拥有类型和值

函数的类型和值

示例:

def counter(value: Int): Int = {
  value += 1             //示例,会报错
}

类型:

输入参数:Int

输出参数:Int

表示为:(Int) => Int

值:去掉函数声明

(value) => { value += 1}

用声明变量的方法去声明:

//       输入类型  输出类型     函数的值     
val counter: Int => Int = {(value) => value += 1}

匿名函数:Lambda表达式

//(参数) => 表达式 
(num: Int) => num * 2

把匿名函数存在变量里

scala> val myNumFunc: Int => Int = (num: Int) => num * 2
val myNumFunc: Int => Int = $Lambda$1066/0x000002a890534418@33f349ae

scala> println(myNumFunc(3))
6

scala语可以进行推断值,可以简写为以下的方式

scala> val myNumFunc1 = (num: Int) => num * 2
val myNumFunc1: Int => Int = $Lambda$1084/0x000002a89053ce40@11c25846

scala> println(myNumFunc1(3))
6

scala>
scala> val myNumFunc2: Int => Int = (num) => num * 2
val myNumFunc2: Int => Int = $Lambda$1085/0x000002a89053f818@4b7a4c83

scala> println(myNumFunc2(3))
6

scala>

但如果省略到无法进行推断,那就进行报错

闭包

val addMore = (x:Int) => x + more

本质:函数内部调用函数外部的一些值,并且可以在函数外部改变函数的值

占位符语法

用下划线"_"作为一个或多个参数占位符

针对集合的操作

遍历操作:

val list = List(1,2,3,4,5)
// for进行遍历
for(elem <- list){
  println(elem)
}
// foreach进行遍历
list.foreach(elem =>{
  println(elem)
})

....

map操作和flatMap操作

map操作是针对于集合的典型变换操作,进行依次变换

scala> val book = List("Hadoop","Hive","HDFS")
val book: List[String] = List(Hadoop, Hive, HDFS)

scala> book.map(s => s.toUpperCase)
val res3: List[String] = List(HADOOP, HIVE, HDFS)

 

进行依次变换,将book的每一个元素进行取出来,然后进行变换,再进行存储

flatMap:将多个集合挤压为一个字符

scala> val books = List("Hadoop","Hive","HDFS")
val books: List[String] = List(Hadoop, Hive, HDFS)

scala> books flatMap(s => s.toList)
val res0: List[Char] = List(H, a, d, o, o, p, H, i, v, e, H, D, F, S)

scala>

首先,先进行tolist操作:

在进行挤压:

filter操作

进行过滤操作

reduce操作

对集合元素进行归约

reduceLeft 从头部开始操作

reduceRight 从尾部开始操作

fold操作

函数式编程实例

posted on 2024-01-20 22:57  实名吓我一跳  阅读(13)  评论(0)    收藏  举报