第九周 第4章 Scala函数式编程
1 | 下面我们来学习一下scala中最重要的内容,函数式编程,其实我们学习Scala这门语言就是因为它的这一个特性,咱们在最开始的时候给大家演示了,使用java代码实现函数式编程是很复杂的,而使用scala代码实现函数式编程就很轻松,很简单了。 |
什么是函数式编程
1 | Scala是一门既面向对象,又面向过程的语言。 |
函数赋值给变量
1 | Scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量 |
1 | scala> def sayHello(name: String) { println("Hello, " + name) } |
匿名函数
1 | Scala中的函数也可以不需要命名,这种函数称为匿名函数 |
1 | scala> val sayHelloFunc = (name: String) => println("Hello, " + name) |
高阶函数
1 | 由于函数是一等公民,所以说我们可以直接将某个函数作为参数传入其它函数 |
1 | 看一个例子: |
1 | scala> greeting(sayHelloFunc, "scala") |
1 | 或者还可以这样用,直接把匿名函数的定义传过来也是可以 |
1 | 高阶函数可以自动推断出它里面函数的参数类型,对于只有一个参数的函数,还可以省去小括号 |
常用高阶函数
1 | 刚才是我们自己实现的高阶函数,其实我们在工作中自己定义高阶函数的场景不多,大部分场景都是去使用已有的高阶函数 |
1 | map:对传入的每个元素都进行处理,返回一个元素 |
map
1 | scala> Array(1, 2, 3, 4, 5).map(num=>{num * 2}) |
flatMap
1 | scala> Array("hello you","hello me").flatMap(line=>line.split(" ")) |
foreach
1 | scala> Array(1, 2, 3, 4, 5).map(_ * 2).foreach(num=>println(num)) |
filter
1 | scala> Array(1, 2, 3, 4, 5).filter(num=>num % 2 == 0) |
reduceLeft
1 | reduceLeft的使用 |
案例:函数式编程
1 | 统计多个文本内的单词总数 |
1 | val lines01 = scala.io.Source.fromFile("D://a.txt").mkString |

