字符串高级操作:***** 非常重要

将函数赋值给变量/值
def sayHello(name:String): Unit = {
  println(s"Hello:$name")
}

object StringApp extends App {
  val s = "Hello:PK"
  val name = "PK"
  //println(s + name)

  println(s"Hello:$name")

  val team = "AC Milan"
  //插值
  println(s"Hello:$name, welcome to $team")

  多个字符串的写法:
  val b =
    """
     |这是一个多行字符串
     |hello
     |world
     |PK
    """.stripMargin
  println(b)
}

匿名函数
  (参数名:参数类型) => 函数体

没有大括号,()是必须的
有大括号, ()是可以去掉的

scala> (x:Int) => x+1
res0: Int => Int = <function1>

scala> {(x:Int) => x+1}
res1: Int => Int = <function1>

scala> val m1 = (x:Int) => x+1
m1: Int => Int = <function1>

scala> m1(10)
res2: Int = 11

scala> def add(x:Int, y:Int)=>{x+y}
add: (Int, Int) => Int

scala> add(2,3)
res3: Int = 5

scala> map(x=>(x,1))

currying函数:颗粒化的方式

object FunctionApp extends App {
  //将原来接收两个参数的一个函数,转换成2个,这就是颗粒化。
  

  def sum(a:Int, b:Int) = a+b
  println(sum(2,3))

  颗粒化的方式:
  def sum2(a:Int)(b:Int) = a + b
  println(sum2(2)(3))
}

高阶函数 *****

主要有map、filter、flatmap、foreach、reduce等

map: 是对每个元素进行某个操作
flatMap: 先压扁到一起,再做map操作
foreach:遍历每一个元素

object FunctionApp extends App {

  val l = List(1,2,3,4,5,6,7,8)

  //map:逐个去操作集合中的每个元素
  l.map((x:Int) => x+1) //给l的LIST里的每个元素+1

  l.map((x) => x * 2) //能自己推导类型
  l.map(x => x * 2) //去掉括号的前提是括号里面是一个元素就可以省略
  l.map( _ * 2).foreach(println) //表示每个元素都乘以2,foreach:遍历每一个元素,不使用foreach的话在IDEA里是不能打印的。

  l.map(_*2).filter(_ > 8).foreach(println) //取出大于8的

  l.take(4) //取出集合的前4个元素

  //1+2=3 3+3=6 6+4=10 10+5=15
  l.reduce(_+_) //集合的元素两两相加

  l.reduceLeft(_-_) //-34
  l.reduceRight(_-_) //-4

  l.fold(0)(_-_)
  l.foldLeft
  l.foldRight

  l.max
  l.min
  l.sum

scala> val f = List(List(1,2),List(3,4),List(5,6))
f: List[List[Int]] = List(List(1,2), List(3,4), List(5,6))

scala> f.flatten //把所有数据压扁到一起
res20: List[Int] = List(1, 2, 3, 4, 5, 6)

// flatMap
scala> f.map(x=>x)
res22: List[List[Int]] = List(List(1,2), List(3,4), List(5,6))

scala> f.map(_.map(_*2))
res23: List[List[Int]] = List(List(2,4), List(6,8), List(10,12))

scala> f.flatMap(_.map(_*2)) //先把数据打扁在一起,然后在调用map。
res24: List[Int] = List(2, 4, 6, 8, 10, 12)

cat hello.txt
hello,world,hell,hello

  val txt = scala.io.Source.fromFile("/Users/rocky/imooc/hello.txt").mkString //从文件里读取数据并把数据转换成字符串

  println(txt)

  val txts = List(txt)
  txts.flatMap(_.split(",").map(x => (x,1))).forreach(println) //把数据按逗号进行分割以后再打扁
}

偏函数:PartialFunction[A,B]
A: 输入参数类型
B:输出参数类型
常用作输入模式匹配

/**
* 偏函数:被包在花括号内没有match的一组case语句
*/

object PartitalFunctionApp extends App {
  //match的写法
  val names = Array("Akiho Yoshizawa", "YuiHatano", "Aoi Sola")
  val name = names(Random.nextInt(names.length)) //随机取一个名字

  name match {
    case "Akiho Yoshizawa" => println("吉老师...")
    case "YuiHatano" => println("波老师...")
    case _ => println("真不知道你们在说什么...")
  }

  //偏函数的写法:
  def sayChinese:PartitalFunction[String,String] = { //穿进去一个入参,输出一个出参。
    case "Akiho Yoshizawa" => "吉老师..."
    case "YuiHatano" => "波老师...")
    case _ => "真不知道你们在说什么..."
  }

  println(sayChinese("Akiho Yoshizawa"))

}

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

  1. Scala学习——函数高级操作

    scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...

  2. Scala函数高级篇

    一.匿名函数 没有名字的函数就是匿名函数,格式:(x:Int)=>{函数体} x:表示输入参数类型:Int:表示输入参数类型:函数体:表示具体代码逻辑 传递匿名函数至简原则: 参数的类型可以省略 ...

  3. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  4. cassandra高级操作之索引、排序以及分页

    本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...

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

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

  6. python列表(list)的使用技巧及高级操作

    python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...

  7. scala 基本类型和操作

    Scala基本类型 Scala中的基本数据类型如下图:  (来源:Programming in scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是 ...

  8. SpringMVC整合Mongodb开发,高级操作

    开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 +  ...

  9. Scala类型系统——高级类类型(higher-kinded types)

    高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...

随机推荐

  1. vue的请求数据方式

    一,vue-resource请求数据 介绍:vue-resource请求数据方式是官方提供的一个插件 步骤: 1,npm安装     npm  install vue-resource  --save ...

  2. NLP 中 Attention Model 解析

    Attention Model,简称AM模型,本文只谈文本领域的AM模型,其实图片领域AM的机制也是相同的. 目前绝大多数文献中出现的AM模型是附着在Encoder-Decoder框架下的,但是其实A ...

  3. python基础--局部变量与全局变量

    #全局变量作用于全局或整个程序中,程序执行完毕后销毁,局部变量作用在当前函数中,调用函数执行完毕及销毁 #如果函数的内容无global关键字,优先读取同名局部变量,如果没有同名局部变量,只能读取同名全 ...

  4. cp 复制文件或目录

    1. 命令功能 cp --copy files and directories.复制文件或目录. 2. 语法格式 cp  [option]  source des cp  [option]  sour ...

  5. openGL图形渲染管线

    在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应屏幕的2D像素.3D坐标转为2D坐标的处理过程是由OpenGL的图形渲 ...

  6. 什么是shader?

    一.什么是shader? shader是一段GLSL(openGL着色语言)小程序,运行在GPU(图形处理器),而非CPU使用GLSL语言编写,看上去像c或c++,但却是另外一种不同的语言.使用sha ...

  7. vue2.0  之 directive指令 (自定义)

    指令 一.定义: 指令只一种可以附加到DOM元素的微命令(tiny commands). 它们通常以"v-"作为前缀, 以方便Vue知道你在使用一种特殊的标记, 从而确保语法的一致 ...

  8. Linux命令行工具之vmstat命令

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484608.html vmstat是一款指定采样周期和次数的功能性监测工具,可以使用它监控进程上下文 ...

  9. Json转换 在java中的应用

    Json转换辅助类比较多,比如谷歌的Gson,阿里的FastJson,Jackson.net.sf.json等等 用了一圈后,本人还是比较推荐用net.sf.json 这里就介绍一下net.sf.js ...

  10. 关闭本机的代理服务(Proxy)

    若您使用了代理服务(Proxy),可能会导致战网游戏发生网络连接.安装或更新方面的问题.请参考以下步骤来关闭您电脑的网络代理服务. Windows 按下 Windows 按鍵 + R . 在运行框中, ...