Scala语言之高阶函数(4)

==> 常用函数讲解

        ---> map   作用于列表中的每一个元素

// 定义一个列表 
val list= List(1,2,3,4,5,6,7,8,9)

// list 列表中的所有元素乘以2
list.map((i:Int) => i*2)

// 使用 foreach 做相同的操作,foreach 不会返回值
list.foreach((i:Int) => i*2)

        ---> filter    过滤返回值为 False 的元素

val list = List(1,2,3,4,5,6,7,8,9)

list.filter((i:Int) => i%2==0)
// 返回结果为:List[Int] = List(2, 4, 6, 8)
// 还可写作
num.filter(_%2==0)

        ---> zip 将两个数组合并

List(1,2,3).zip(List(4,5,6))
// 输出结果为
List[(Int, Int)] = List((1,4), (2,5), (3,6))

        ---> partition    将符合过滤规则的元素放在一个分区,将不符合过滤规则的放在别一个分区

List(1,2,3,4,5,6,7,8,9).partition((i:Int) => i%2==0)
// 输出结果为:(List[Int], List[Int]) = (List(2, 4, 6, 8),List(1, 3, 5, 7, 9))

        ---> find   找到列表中第一个符合规则的元素

        ---> flatten  压平操作,将三维数组转化成二维数组或将二维数组转化为一维数组,需要注意的是,转化时必须保证每个元素还能够再进行提取,否则会报错

List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten

// 如果要继续进行压平操作,刚会报错
List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten
error:
<console>:12: error: No implicit view available from Any => scala.collection.GenTraversableOnce[B].
List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten

// 若要继续压平操作,需将处理处理修改一下
List(List(List(1),List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten

// 结果为:List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

        ---> flatMap    相当于 Map 与 flatten 两个功能的结合体

val list = List(List(1,2,3),List(4,5,6))
// 此处的 x 相当于将源数据 flatten 压平后得到的结果,然后对每个元素进行操作
list.flatMap(x=>x.map(_*2))
// 此条语句等价于以下两步操作
val x = list.flatten
x.map(_*2)

==> 闭包    函数的嵌套

        ---> 定义普通函数: 

def myfun(x:Int, y:Int):Int = x * y

        ---> 采用闭包

// 定义一个闭包函数,其中,x 为乘数因子,即:乘以的倍数(我自己理解为被乘数),y 是使用函数传入的参数
def myfun(x:Int)=(y:Int) => x * y

// 第一步先定义自己函数的模型
val mytest = myfun(2)

// 使用自己定义好的函数模型,传入参数
mytest(20)

==> 柯里化  一个数学家的名子,其本质将一个多参数函数转换成函数链,每个节点上都有一个单一参数的函数

举例:

def add(x:Int, y:Int):Int = x + y

def add(x:Int)(y:Int) = x + y

原文地址:http://blog.51cto.com/songqinglong/2071922

时间: 2024-08-01 19:37:20

Scala语言之高阶函数(4)的相关文章

scala中的高阶函数

高阶函数 val list =List(1,2,3,4,5,6,7,8) val newList = list.map((x:Int) => 2*x) //map表示映射list中的每一个元素的值为原来的2倍 //newList中的值为 2,4,6,8,10,12,14,16 也可直接写成 val newList = list.map(x => 2*x) 也可等价写成 val newList = list.map(2*_) map函数相当于foreach 集合Set val s = Set(1

第6节 Scala中的高阶函数:1、2、3、

Scala高级特性 1.    课程目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数.在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等等. 2.2.   作为值的函数 可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用. 定义函数时格式

Scala入门到精通——第十三节 高阶函数

本节主要内容 高阶函数简介 Scala中的常用高阶函数 SAM转换 函数柯里化 偏函数 1. 高阶函数简介 高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数.这两种在本教程的第五节 函数与闭包中已经有所涉及,这里简单地回顾一下: (1)函数参数 //函数参数,即传入另一个函数的参数是函数 //((Int)=>String)=>String scala> def convertIntToString(f:(Int)=>String

Haskell高阶函数

Haskell functions can take functions as parameters and return functions as return values. A function that does either of those is called a higher order function. Higher order functions aren't just a part of the Haskell experience, they pretty much ar

Swift 烧脑体操(三) - 高阶函数

前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困难.不过一切都是值得的,Swift 相比 Objective-C,写出来的程序更安全.更简洁,最终能够提高我们的工作效率和质量. Swift 相关的学习资料已经很多,我想从另外一个角度来介绍它的一些特性,我把这个角度叫做「烧脑体操」.什么意思呢?就是我们专门挑一些比较费脑子的语言细节来学习.通过「烧

Scala 高阶函数(high-order function)剖析

Scala 是一种函数式编程语言,也就是说每一个函数都是一个值.Scala 有很简洁的语法用于定义匿名函数.curry 化函数(curried function).应用函数.偏函数以及嵌套函数等.函数式编程由数学函数演变得来,包含大量诸如串联与并联.组合与分离.协变与逆变等一系列概念.本文将就如何实现高阶函数进行阐述,其他部分内容不进行深究. 类型参数化协变与逆协变 类型参数化(type parameterization)由类型协变性(Type variance)补充构成,类型协变性的机制则是在

Spark 3000门徒第三课scala高阶函数总结

今晚听了王家林老师3000门徒spark系列课程的第三课,讲述了scala函数,下面写一下心得: 普通函数:def fun1(name:String){println(name)} 函数赋值给变量:val fun1 = functionName _ 匿名函数:val fun2 = (name:String) => prinln(name) 高阶函数:def bigData(func:(String) => Unit, content: String){func(content)} 返回值是函数

【Scala】高阶函数和柯里化

高阶函数 在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: - 接受一个或多个函数作为输入 - 输出一个函数 在数学中它们也叫做算子(运算符)或泛函.微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数. 高阶函数的例子 假设有一个函数对给定两个数区间中的所有整数求和: def sumInts(a: Int, b: Int): Int = if(a > b) 0 else a + sumInts(a + 1, b) 如果现在要求连续整数的平方和: def square(x:

快学Scala(12)--高阶函数

在函数式编程语言中,你只需要将明细动作包在函数当中作为参数传入即可. 作为值的函数 import scala.math._ class TestFun { val num = 3.14 val fun = ceil _ } 这段代码将num设为3.14,fun设为ceil函数.ceil函数后面的_意味着你确实指的是这个函数,而不是碰巧忘记了给他送参数 Array(3.14, 1.42, 2.0).map(fun) //Array(4.0, 2.0, 2.0) map方法接受一个函数参数,将它应用