(大数据开发随笔3)Scala编程语言基础——Scala函数式编程

Scala函数式编程

Scala中的函数

  • 值函数:将函数作为变量的值
def myFunc() = "hello world"
val v1 = myFunc()
myFunc(v1)
  • 匿名函数:没有名字的函数
Array(1, 2, 3).map((x:Int) => x * 3)
  • 高阶函数(带函数参数的函数)
// 高阶函数
// 例一:对10进行某种运算
def someAction(f:(Double) => Double) = f(10)
// 只要满足,参数是double,返回值时double,都可以作为f的值
import scala.math._
someAction(sqrt)

// 例二:
def mytest(x:Int, y:Int, f:):Int = {x*y + 100}
def myFunction(f:(Int, Int) => Int, x:Int, y:Int):Int = {f(x, y)}

myFunction(mytest, 2, 3) // res: Int = 106

闭包

  • 函数嵌套
def mulBy(factor:Double) = (x:Double) => x * factor
// 调用
val triple = mulBy(3)
val half = mulBy(0.5)

println(triple(2)) // 6
println(half(10)) // 5

柯里化

  • 把具有多个参数的函数转换为一个函数链,该链表上的每个节点都是单一函数参数
def add(x:Int, y:Int) = x + y
// 柯里化
def add(x:Int)(y:Int) = x + y
// 调用
add(2)(3)

常用高阶函数

val numbers = List(1,2,3,4,5,6)

// map
numbers.map((i:Int) => i * 2)

//foreach: 与map类似,但没有返回值
numbers.foreach((i:Int) => i * 2)

// filter
number.filter((i:Int) => i%2 == 0) // 返回能够被2整除的数
number.filter(_ % 2 == 0) // 同上

// zip
List(1,2,3).zip(List(4,5,6)) // List((1, 4), (2, 5), (3, 6))

// partition
number.partition((i:Int) => i%2 == 0) // 返回两个List,一个能被2整除,另一个不能

// find: 返回第一个匹配的元素
number.find(_ % 3 == 0)

// flatten: 将嵌套结构展开
List(List(1,2,3), List(4,5,6)).flatten // List(1,2,3,4,5,6)

//flatMap: 结合flatten和map
var myList = List(List(1,2,3), List(4,5,6))
myList.flatMap(x => x.map(_ * 2)) // 展开后再乘2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值