Scala中的高阶函数

        在Scala语言中,面向函数编程也是一个非常有趣也是非常重要的特性,高阶函数是函数式编程的核心,能够极大地提升代码的抽象和复用性。

        这边我们给出一个需求来引入:

        第一列是1000个学生的学号,第二列是六门科目的代码,第三列是科目对应的成绩,我们这里的需求就是如何统计每一位同学的六门科目的成绩之和,怎么操作呢?如果使用java代码来进行实现,不难想到,我们需要进行很多次分开的调用,先用split()方法进行切分,然后将每行记录中的学号和成绩储存在一个list中,然后用map中的方法对list中的成绩进行累加,工作量之大还是可以想象的,但是如果我们使用scala进行编写,那可就简单多了

object show {
  def main(args: Array[String]): Unit = {
    val list: List[String] = Source
      .fromFile("data/score.txt")
      .getLines().toList
    val singlescore: List[(String, Int)] = list.map(score => {
      val strings: Array[String] = score.split(",")
      val id: String = strings(0)
      val soloscore: Int = strings(2).toInt
      (id, soloscore)
    })
    val scoree: Map[String, List[(String, Int)]] = singlescore.groupBy(_._1)
    scoree.map((kv:(String, List[(String, Int)]))=>{
      val id: Int = kv._1.toInt
      val list: List[(String, Int)] = kv._2
      val values: List[Int] = list.map(scor => scor._2)
      val sum: Int = values.sum
      (id,sum)
    }).foreach(println)
  }

}

        虽然比java代码要简洁不少,但是如此之多的中间量看上去还是让人有些心烦意乱,现在我们可以使用Scala中最优雅的代码来解决————链式调用

    Source.fromFile("data/score.txt")
      .getLines()
      .toList
      .map(_.split(","))
      .map(arr => (arr(0), arr(2).toInt))
      .groupBy(_._1)
      .mapValues(_.map(_._2).sum)
      .map { case (id, sum) => (id.toInt, sum) }
      .foreach(println)

不断使用_来进行函数的调用,非常优雅,值得大家学习。        

优雅,简洁,这就是scala语言的精髓。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值