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. Java 面试题关于包装类

    这几个问题的知识点涉及的内容非常的刁钻,值得自己好好的理解. 问以下程序的输出结果是: 问题一: Object object=true ? new Integer(1):new Double(2.0) ...

  2. 【NX二次开发】常用的标准对话框

    1.uc1601 单按钮模态对话框 1 //来自"王牌飞行员_里海"的测试源码(qq群753801561) 2 extern DllExport void ufusr(char * ...

  3. 谷歌:python速成课程笔记

    1.从用户那里获取信息 name = "Alex" print("hello" + name) 2.让python成为你的计算器 1 print(4+5) 2 ...

  4. 想自己写框架?不了解Java注解机制可不行

    无论是在JDK还是框架中,注解都是很重要的一部分,我们使用过很多注解,但是你有真正去了解过他的实现原理么?你有去自己写过注解么? 概念 注解(Annotation),也叫元数据.一种代码级别的说明.它 ...

  5. asp.net core配合vue实现后端验证码逻辑

    概述 网上的前端验证码逻辑总感觉不安全,验证码建议还是使用后端配合验证. 如果产品确定可以上网的话,就可以使用腾讯,百度等第三方验证,对接方便.但是产品可能内网部署,就必须自己写了. 本文章就是基于这 ...

  6. .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  7. 基于ABP落地领域驱动设计-01.全景图

    什么是领域驱动设计? 领域驱动设计(简称:DDD)是一种针对复杂需求的软件开发方法.将软件实现与不断发展的模型联系起来,专注于核心领域逻辑,而不是基础设施细节.DDD适用于复杂领域和大规模应用,而不是 ...

  8. WPF中ListView控件怎么添加新的tiem时滚动条一直在最下面

    listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1])

  9. DOS命令行(11)——更多实用的命令行工具

    start 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用.该命令不仅能运行程序,还能运行协议对应的程序 命令格式:START ["title& ...

  10. sleep、wait方法之间区别

    sleep.wait方法之间区别 1.所属的类不同 sleep是Thread类的静态方法,而wait是Object类的成员方法 2.锁机制不一样 sleep方法:会让出资源调度器为当前线程分配的时间片 ...