scala函数高级操作

一、字符串高级操作

多行字符串和插值

package top.ruandb.scala.Course06
object StringApp { def main(args: Array[String]): Unit = {
val str =
"""
|这是一个多行字符串
|hello
|lucy
|lallalla
""".stripMargin val say ="hello"
val name = "lucy"
println(say +": "+name )//传统字符串拼接
println(s"$say: $name")//字符串插值操作
}
}

二、匿名函数

package top.ruandb.scala.Course06

/**
* 匿名函数
* (参数名:参数类型 ...) => 函数体
* 可以把匿名函数传给一个变量
* 可以把匿名函数传给一个函数
*/
object FunctionApp { def main(args: Array[String]): Unit = {
sayHello("lucy")
a("lucy")
say("lucy")
} //常规函数
def sayHello(name:String): Unit ={
println(s"hello $name")
}
//匿名函数
(name:String) => {println(s"hello $name")}
//将匿名函数传给一个变量
val a = (name:String) => {println(s"hello $name")}
//将匿名函数传给函数
def say =(name:String) => {println(s"hello $name")}
}

三、currying函数(柯里化函数)

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。

package top.ruandb.scala.Course06
object FunctionApp { def main(args: Array[String]): Unit = {
println(sum(1,9))
println(sum1(1),(9))
}
//常规函数
def sum(a:Int,b:Int): Int = a + b
//currying函数
def sum1(a:Int)(b:Int)=a + b
}

四、高阶函数

高阶函数(Higher-Order Function)就是操作其他函数的函数

package top.ruandb.scala.Course06
object FunctionApp { def main(args: Array[String]): Unit = {
//调用test,传入printName函数和lucy
test(printName,"lucy")
}
def test(f:String => Unit ,name:String) = f(name);
def printName(name:String): Unit ={
println(s"my name is $name" );
}

常用高阶函数

package top.ruandb.scala.Course06
object FunctionApp { def main(args: Array[String]): Unit = {
val l =List(1,2,3,4,5,6,7,8,9);
//map:逐个操作集合中的每个元素,所有集合类型都存在map函数
l.map((x:Int) => x*10).foreach(println)
//filter:过滤元素
l.map( _ * 10).filter(_ > 30).foreach(println)//过滤大于30的元素
//take:取前几个元素
l.map( _ * 10).take(4).foreach(println)//取前4个元素
//reduce:归纳、简化的意思,把容器中的元素作参数传给里面的二元匿名函数
//函数体可以是求和,也可以是求积,等等,把容器中的元素归集起来返回。
println(l.reduce(_ + _)) //45:相当于 1+2 3+3 6+4 .......
println(l.reduceLeft(_-_))//-43: 相当于 1-2 -1-3 ......
println(l.reduceRight(_-_))//5:相当于 1-(2-(3-(4-(5-(6-(7-(8-9)))))))
//fold(折叠)函数将一种格式的输入数据转化成另外一种格式返回
//fold操作需要从一个初始的“种子”值开始,并以该值作为上下文,处理集合中的每个元素。
println(l.fold(10)(_*_))//3628800:相当于:((10*1)*2).......
//foldLeft(),第一个参数为累计值,集合遍历的方向是从左到右
println(l.foldLeft(10)(_-_))//-35:相当于((10-1)-2)-3........
//foldRight(),第二个参数为累计值,集合遍历的方向是从右到左
println(l.foldRight(10)(_-_))//-5:相当于1-(2-(3-(4-(5-(6-(7-(8-9))))))) - 10
//max求最大
println(l.max)
//min求最小
println(l.min)
//sum求和
println(l.sum)
//flatten:可以把嵌套的结构展开.
val f = List(List(1,2),List(3,4),List(5,6))
println(f.flatten) //List(1, 2, 3, 4, 5, 6)
//flatmap:结合了map和flatten的功能。接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。
println(f.flatMap(_.map(_*2)))//List(2, 4, 6, 8, 10, 12)
} }

五、偏函数

偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念。

Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。

package top.ruandb.scala.Course06
object FunctionApp { def main(args: Array[String]): Unit = { println(pf("1"))
}
//偏函数:被包在花括号内没有match的一组case语句
def pf:PartialFunction[String,String]={
case "1" => "one"
case "2" => "two"
case _ => "other"
} }

Scala学习——函数高级操作的更多相关文章

  1. Scala函数高级操作

    字符串高级操作:***** 非常重要 将函数赋值给变量/值def sayHello(name:String): Unit = { println(s"Hello:$name")} ...

  2. SVN 学习笔记-高级操作

    所谓高级操作,只是曲高和寡,其实都不怎么用的.但是关键时候,可能会很有用. 这个高级只是针对基本操作而言.有些操作可能也是比较基本的. 清除锁 有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常 ...

  3. Scala学习——函数

    一.函数的定义(def) object FunctionApp { //定义函数:方法体内最后一行为返回值,不需要使用return def add(a:Int,b:Int):Int={ a + b } ...

  4. (七)linux 学习 -- 键盘高级操作技巧

    The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap09.html 文章目录 移动光标 修改文本 ...

  5. scala集合和高级函数操作

    scala常用函数操作 reduceLeft   是将集合的元素从左向右进行所需要的相应操作,图以减法为例展示,表达的算法是 : 1-2-3-4-5 例: (1 to 5).reduceLeft(_ ...

  6. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  7. Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

    1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...

  8. Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合

    前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...

  9. Scala 学习之路(十)—— 函数 & 闭包 & 柯里化

    一.函数 1.1 函数与方法 Scala中函数与方法的区别非常小,如果函数作为某个对象的成员,这样的函数被称为方法,否则就是一个正常的函数. // 定义方法 def multi1(x:Int) = { ...

随机推荐

  1. ISP算法高水平分析(下)

    ISP算法高水平分析(下)  十.LSC(Lens Shade Correction)------镜头阴影矫正 Lens Shading指画面四角由于入射光线不足形成的暗角,同时,由于不同频率的光折射 ...

  2. 自监督学习(Self-Supervised Learning)多篇论文解读(下)

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...

  3. CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet)

    CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet) ImVoteNet: Boosting 3D Object Detection in Point Clouds With ...

  4. 算法训练 区间k大数查询(题解)

    资源限制 时间限制:1.0s   内存限制:256.0MB   问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个.   输入格式 第一行包含一个数n,表示序列长度. 第二行包 ...

  5. 太神奇了!GIF的合成与提取这么好玩

    今天辰哥教大家一个Python有趣好玩的小功能:将多张图片转为GIF,同时也可以将一个GIF动图提取出里面的图片 在开始之前,先来一个动图开头(预览) 01.图片转GIF动图 1.准备工作 在开始合并 ...

  6. 【NX二次开发】Block UI对话框-代码生成部分

    常规: 语言:生成的代码语言 生成附注:是否生成注释代码 生成特定与块的代码: 输入点: 回调:对话框通过回调函数调用,例如通过另一个对话框的按钮调用本对话框 菜单:对话框通过菜单调用 用户出口:对话 ...

  7. NX二次开发-获取WCS坐标系的原点坐标和矩阵标识

    函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...

  8. 【NX二次开发】打开信息窗口UF_UI_open_listing_window

    头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ...

  9. MySQL:数据库优化,看这篇就够了

    数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览 ...

  10. 在Centos7下安装RabbitMQ

    1.背景 不用多说,这东西好用! 2.安装 步骤一:下载安装包 链接:https://pan.baidu.com/s/1PIYI60wX6L7BtVyVft-vSA 提取码:1234 复制这段内容后打 ...