Scala(函数高级操作)-第六天

本文深入探讨Scala编程语言的高级特性,包括多行字符串处理、插值语法、匿名函数、Curry函数、高阶函数的应用及偏函数的实现。通过实例演示了如何利用Scala的函数式编程特性进行高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、字符串高级操作

    多行


        val b = 
        """
            |这是一个多行字符串
            |hello
            |world
        """.stripMargin
    
    Interpolation(插值)

        val name = "Messi"
        println(s"Hello:$name")

        val team = "AC"
        println(s"hello:$name, Welcome to $team")

2、匿名函数
    //函数是可以命名的,也可以不命名
    //(参数名:参数类型...) => 函数体    val m1 = (x:Int)=>x+1    m1(10)  结果为11
    object FunctionApp extends App{
        def sayHello(name:String):Unit={
            println("hi:"+name)
        }
        sayHello("messi")
    }

    def add =(x:Int,y:Int)=>{x+y}
    //(x:Int,y:Int)为匿名函数

    add(2,3)

3、curry函数
    //将接收两个参数的一个函数,转换成2个
    def sum(a:Int, b:Int) = a+b
    println(sum(1,2))

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

4、高阶函数
    map,filter,flatmap,foreach,reduce等

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

    //map:逐个去操作集合中的每个元素
    l.map((x:Int) => x+1)    //(x:Int)相当于入参,x+1为作用在每个元素上的函数
    简:l.map(x => x+1)    //x只有一个元素,才可以省括号,不然就得l.map((x,y) => x+1);;Int因为可以自动导出,所以可以省略

    l.map(_*2)

    l.map(_*2).foreach(println)

    l.map(_*2).filter(_>8).foreach(println)

    l.take(4)    //取前4个元素

    l.reduce(_+_) //两两相加 1+2 3+3 6+4 10+5 ....
    l.reduce(_-_) //-34

    l.reduceLeft(_-_)    //-34    (((((((1-2)-3)-4)-5)-6)-7)-8)
    l.reduceRight(_-_)    //-4    (1-(2-(3-(4-(5-(6-(7-8)))))))

    l.fold(0)(_-_)    //Int = -36

    val f = List(List(1,2),List(3,4),List(5,6))
    f.flatten    //List(1,2,3,4,5,6)

    f.map(_.map(_*2))    //List(List(2,4),List(6,8),List(10,12))
    f.flatmap(_.map(_*2))    //List(2,4,6,8,10,12)

    读取文件
    val txt = scala.io.Source.fromFile("/Users/terry/hello.txt").mkString
    println(txt)

    val l = List(txt)
    l.flatMap(_.split(",")).map(x=>(x,1)).foreach(println)
    l.flatMap(_.split(",")).map(x=>(x,1)).reduce(_+_)
    //链式编程

5、偏函数
    //A 输入参数类型    B 输出参数类型
    def sayChinese:PartialFunction[String,String]={
        case "Akiho Yoshizawa" => "季老师"
        case "YiHatnao" => "波老师"
        case _ => "真不知道你们在说什么"

    }
    println(sayChinese("Akiho Yoshizawa"))


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值