Scala 几个经典的高阶函数 foreach、filter、map、reduce

本文介绍了Scala编程中四个重要的高阶函数:foreach用于遍历集合并执行自定义操作;filter则根据指定的条件过滤元素;map实现了一对一的元素转换;reduce对集合进行聚合运算,整合所有元素。

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

1、foreach 函数

遍历集合中的元素,具体遍历到每个元素的时候,做什么事情,那是由调用者来确定的

object High5 {
  def main(args: Array[String]): Unit = {
    val arr1:Array[Int] = Array(30,50,70,60,10,20)
    foreach(arr1,a=>{
      println(a)
    })
    foreach(arr1,println)
    //println: 本身为接收一个Any类型返回一个Unit类型
  }
  def foreach(arr:Array[Int],op:Int => Unit) ={
    for (elem <- arr) {
      op(elem)
    }
  }
}

2、filter 函数

过滤,过滤条件可以通过一个返回 boolean 的函数来体现

object High5 {
  def main(args: Array[String]): Unit = {
    val arr1:Array[Int] = Array(30,5,7,60,1,20)
    val arr2 = filter(arr1,x => x%2==0)
    //val arr2 = filter(arr1,_ %2==0) 这样写也可以
    foreach(arr2,println)
    val arr3 = filter(arr1,x => x>25)
    foreach(arr3,println)
  }

  def filter(arr:Array[Int],condition:Int => Boolean)={
  	//通过一个数组,得到一个新的数组 for 推导
    for(elem <- arr if condition(elem)) yield elem
  }
  def foreach(arr:Array[Int],op:Int => Unit) ={
    for (elem <- arr) {
      op(elem)
    }
  }
}

3、map 函数

映射,一进一出

bject High5 {
  def main(args: Array[String]): Unit = {
    val arr1:Array[Int] = Array(30,5,7,60,1,20)
    val arr2 = map(arr1,x=>x*x)
    foreach(arr2,println)
  }
  
  def foreach(arr:Array[Int],op:Int => Unit) ={
    for (elem <- arr) {
      op(elem)
    }
  }

  def map(arr:Array[Int],op:Int => Int)={
    for(elem <- arr) yield op(elem)
  }
}

4、reduce 函数

聚合操作

object High5 {
  def main(args: Array[String]): Unit = {
    val arr1: Array[Int] = Array(30, 5, 7, 60, 1, 20)
    val result = reduce(arr1,(x,y)=>x+y)
    println(result)
  }

  /**
    * 聚合操作
    * 1 2 3 4 5 6 .... 100
    * op:(c1,c2)=>r
    * c1 表示上次聚合的结果,c2 表示这次参与聚合的元素
    * @param arr
    */
  def reduce(arr:Array[Int],op:(Int,Int)=>Int) : Int={
    var sum = 0
    for (elem <- arr) {
      // Array(30,5,7,60,1,20)
      sum=op(sum,elem)
    }
    sum
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值