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. springMVC源码解读笔记

    1: DispatcherServlet 的初始化流程(调用的init方法) a) 初始化spring高级容器,WebApplicationContext(容器初始化12个步骤) Servlet类的i ...

  2. 十二、iptables基本管理

    关闭firewalld,启动iptables服务 [root@proxy ~]# systemctl stop firewalld.service     //关闭firewalld服务器 [root ...

  3. java线程和操作系统线程的异同(大图对比)

    先看看两者的对比: 可以发现: 1.java中细分了阻塞,将阻塞给分成了三个不同类型的阻塞. 2.java没有区分就绪状态和运行状态.java将这两种状态合并成runnable状态. 3.还有一个容易 ...

  4. ORA-09817:Write to audit file failed

    ERROR: ORA-09817: Write to audit file failed. --这种错误基本是磁盘空间满了 问题描述:sqlplus / as sysdba登不上,报上述ora-098 ...

  5. HTTP头部POST表单详解

    2 POST /hello/checkUser.html?opt=xxx HTTP/1.1 方法的声明,Get,Post,Delete等 3 Accept: */* 4 Referer: http:/ ...

  6. url参数接收的一些安全应用场景

    越权漏洞,从原来的修改id越权到后面的自己加参数,减参数越权,到现在的加特殊字符.攻击手段在进步: 以php和java为例,聊聊参数接收的最大接受能力,可以插入哪些脏数据? demo1.php: &l ...

  7. 流程自动化RPA,Power Automate Desktop系列 - 构建VuePress文档中心脚手架

    一.背景 笔者曾基于VuePress搭建过一个文档中心,但是在实现在线管理功能之前,很多时候,新建文档需要手动处理很多数据,看有没有可能实现一个脚手架来处理这些问题,所谓脚手架,就是进行文档初始化的一 ...

  8. Linux中的chkconfig

    chkconfig是用来查看开机自启动项目的命令.默认列出linux系统开机自启的项目.平时我们使用时习惯加上--list 从这个图中可以看到当前系统有哪些开机启动项目,就是红色框中的on. 那么怎么 ...

  9. 三代码使用QScrollArea

    QScrollArea是QT封装好的一个滑动界面类 构造函数如下: 指定一个父对象就行,构造函数提供一个滑动的区域,但是这个区域里是没有内容的,构造函数介绍里面让我们看setWidget()这个函数, ...

  10. 2、oracle用户和权限

    权限主要可以分成三类:系统权限.角色.对象权限,角色是一类系统权限的分组, Oracle 的角色存放在表 dba_roles 中,某角色包含的系统权限存放在 dba_sys_privs 中, 包含的对 ...