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. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

  2. 在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation

    在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation news: yolov5 support 引论 该项目是nvidia官方yolo-tensorrt的封装 ...

  3. MEMS传感器作为变革的驱动力

    MEMS sensors as drivers for change 物联网(IoT)正在改变与周围世界互动的方式.每个人,每件事,都是相互联系的,很快就会相互联系.微机电系统(MEMS)设备和传感器 ...

  4. JAVA微服务应用(1)--SpringBoot中的REST API调用(学习笔记)

    好长时间没有写学习小结了,最近宁正好看了小马哥的微服务系列之<Spring Boot>系列,颇有收获,并且公司也布置一个课题就是关于Spring中的REST API调用.于是乎回归本行,再 ...

  5. NOIP模拟测试26「嚎叫响彻在贪婪的机房·主仆见证了 Hobo 的离别·征途堆积出友情的永恒」

    题目比较神仙,注意是题目神仙 贪婪暗示贪心,堆积暗示堆优化$\%\%\%\%\%\%\%$ 两个乱搞$+$一个堆优化$dp$ 嚎叫响彻在贪婪的机房 题解 对于一个序列来说只要他们差的$gcd$不为$1 ...

  6. 玩转STM32MP157- 在应用层中使用 fbtft

    fbtft使用的是framebuffer框架,这种框架将显示设备抽象为帧缓冲区,对framebuffer设备(/dev/fbx(0.1.2..))进行相关操作可以反应到LCD上. 现在尝试下在用户空间 ...

  7. http强制缓存、协商缓存、指纹ETag详解

    目录 实操目录及步骤 缓存分类 强制缓存 对比缓存 指纹 Etag 摘要及加密算法 缓存总结 每个浏览器都有一个自己的缓存区,使用缓存区的数据有诸多好处,减少冗余的数据传输,节省网络传输.减少服务器负 ...

  8. Java 提效神器 Stream 的冷门技巧

    Stream 使用这个方法创建一个 Stream 对象. new ArrayList<>().stream() Filter 过滤器,里面传递一个函数,这个函数的返回结果如果为 true ...

  9. 【LeetCode每日一题 Day 5】5. 最长回文子串

    大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...

  10. 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包

    一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...