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. 编译原理-DFA与正规式的转化

  2. 牛客网sql实战参考答案(mysql版):1-15

    1.查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为--,mysql为comment) CREATE TABLE `employees ...

  3. 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...

  4. 【NX二次开发】属性操作总结

    内容包括:1.属相创建2.判断属性是否存在3.读取属性值4.时间属性转换成字符串5.统计属性的数量6.删除指定属性7.删除全部属性 源码: 1 #include <stdlib.h> 2 ...

  5. 【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  6. oracle数据库归档日志量陡增分析

    ============= oracle数据库archivelog暴增分析 ==================== 前言 归档量突然增长到981G/天,导致归档目录使用率告警 归档日志量异常暴增会导 ...

  7. ClickHouse学习系列之七【系统命令介绍】

    背景  前面介绍了ClickHouse相关的系列文章,该系列文章包括了安装.权限管理.副本分片.配置说明等.这次介绍一些ClickHouse相关的系统命令,如重载配置文件.关闭服务和进程.停止和启动后 ...

  8. Vue实现点击复制文本内容(原生JS实现)

    需求: 实现点击订单编号复制内容 实现步骤: 这里我是在element 的table组件里实现的步骤,仅供参考,实际上实现思路都大同小异 首先在需要点击的地方,添加点击事件 <div class ...

  9. Linux-ELK日志收集

    1.ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工 ...

  10. jenkins+nexus上传插件发布制品到nexus

    nexus安装 nexus安装参考:https://www.cnblogs.com/afei654138148/p/14974124.html nexus配置 创建制品库 制品库URL:http:// ...