scala函数高级操作

1、字符串高级操作
package com.imooc.scala.scala7

/**

  • 字符串函数
    */

object StringAPP extends App {
//字符串比较初级的拼接使用
val a = “aaaa”
val b = “cccc”
println(a + b)

//$美元号的使用
println(s"我要打印出a:$a")
println(s"打印出啊:$a, 打印出:$b")

//多行字符串
val c =
  """
    |aaaaaaaa
    |dbbbbbbbbb
    |cccccccccccc
    |""".stripMargin

println(c)

}
2、匿名函数
package com.imooc.scala.scala7

/**

  • 匿名函数就是没有名字的函数
    */
    object FunictAPP {
    //例如我们之前定义的函数是这样的
    //def 是定义函数的
    //number 是函数名
    //num:Int 是参数和参数类型
    def number(num:Int): Unit ={
    println(num+1)
    }

//这里是调用
number(2)

//匿名函数是这样
//参数:(num:Int)
//方法体:num + 1
(num:Int) => num + 1

//那么怎么调用那?可以把匿名函数赋给一个变量
val a = (num:Int) => num + 1
//给a赋个值就是参数
a(1)

//还可以把匿名函数赋值给一个函数
def add = (b:Int,c:Int)=>{b+c}
add(1,2)
}
3、currying函数

4、高级函数
package com.imooc.scala.scala7

/**

  • 高级函数
    */

object GaoJiFunict extends App {
//先定义一个集合
val lists = List(1,2,3,4,5,6)

//map 函数就是逐个操作集合里面的每一个元素
//一下例子我们让每个元素加1
// (x:Int) 就是我们集合里面的每一个元素这是入口,出口就是x+1 把每个元素加1出去
lists.map((x:Int) => x+1)
//另一种简写的 就是x的类型可以行省掉map自己会知道
lists.map((x) => x+1)
//还有一种写法,就是在是有一个元素的情况下,我们可以把元素的括号省略掉,两个以上就不可以了
lists.map(x => x+1)
//还有一种就是占位符,占位符就相当于集合里面的每一个元素
lists.map(_+1).foreach(println)

//filter函数,过滤函数,例如我们可以结合上个map的函数把每个
//元素相加后,过滤掉大于5的元素
lists.map(_+1).filter(_ > 5).foreach(println)

//take函数,如果你想取集合里面前几个元素就用take
lists.take(2) //取出集合里面的前2个元素

//reduce函数,将集合里面的元素两两相加
//比如lists集合reduce是这样的1+2=3 3+3=6 6+4 这样
lists.reduce((x:Int,y:Int)=> x + y)
lists.reduce(_+_)
lists.reduce(_-_)
lists.reduceLeft(_+_)//从左边开始
lists.reduceRight(_+_)//从右边开始

//还有一个于reduce相似的函数flod,但是flod需要一个初始值来做
//lists 的值是1,2,3,4,5,6 flod 会先用10去+1,然后得到的累加值,再去加2 以此类推
lists.fold(10)(_+_)

//max函数求lists集合中最大元素
lists.max
//max函数求lists集合中最小元素
lists.min
//max函数求lists集合中元素求和
lists.sum

//在定义一个集合xiaoba
val xiaoba = List(List(1,2),List(3,4),List(5,6))

//把xiaoba变成了一个集合//List[Int] = List(1, 2, 3, 4, 5, 6)
xiaoba.flatten

//结果:scala> xiaoba.map(_.map(_*2))
//res5: List[List[Int]] = List(List(2, 4), List(6, 8), List(10, 12))
xiaoba.map(_.map(_*2))

//结果:scala> xiaoba.flatMap(_.map(_*2))
//res6: List[Int] = List(2, 4, 6, 8, 10, 12)
xiaoba.flatMap(_.map(_*2))

var texta = scala.io.Source.fromFile("/Users/zhaoxinbo/Documents/python-xiangmu/data/scala_work.txt").getLines()//获取文档里面每一行
.toList//转成list集合
.mkString//在转换成字符串
.split(",")//分割
.map(x => (x,1))//给每一个单词附上一个1(aaa,1)
.groupBy(.1)//按照键进行分组
.mapValues(
.map(
.2))//对每个组进行map 取出值
.mapValues(
.reduce(_ + _))//对每组中的值进行两两相加
.foreach(println)//打应出结果
}
5、偏函数
package com.imooc.scala.scala7

/**

  • 偏函数:便函数就是抱在花括号内没有match的一组case语句
    /
    object PianFunictAPP extends App {
    //这个是偏函数,第一个参数是输入参数的类型,第二个参数是输出参数的类型
    def pianShuZu:PartialFunction[Array[String],String]={
    case Array(“a”) => “a”
    case Array(x,y) => “两个”
    case Array(x,y,c) => “三个”
    case Array(“a”,_
    ) => “多个”
    case _ => “没有”
    }
    println(pianShuZu(Array(“c”,“v”)))
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值