scala-聚合算子

scala-聚合算子

聚合算子

count 对元素计数

  • 方法声明
    def count(p: A => Boolean): Int = {}

  • 方法参数为一个一元函数,一元函数传入一个int整数值,返回一个布尔值,只有布尔为true的元素才会被记录

  • count方法可以有选择的统计需要的变量

  • 实例

	val list1 = (1 to 10).toList
    //普通计数,集合长度
    val size = list1.size;
    val length = list1.length
    val i1 = list1.count(_ % 2 == 0)
    print(size+"\t"+length+"\t"+i1)
    /*
    输出:10	10	5
    */

sum 对元素求和

  • 同理还有最大值max,最小值min方法
  • 实例
	val list1 = (1 to 10).toList
    //sum算子
    val sum = list1.sum;val max=list1.max;val min=list1.min
    println(sum+"\t"+max+"\t"+min)
    /*
    输出:55	10	1
    */

reduce 聚合算子

  • 方法声明
    def reduce[A1 >: A](op: (A1, A1) => A1): A1 = reduceLeft(op)

  • [A1 >: A]:reduce的参数A1必须为调用reduce数据集元素类型的子集

  • reduceLeft(op):将匿名函数op传递给reduceLeft,底层调用reduceLeft实现

  • op: (A1, A1) => A1:第一个A1为当前聚合后的变量,第二个A1为当前要聚合的元素。最终返回A1类型的变量

  • reduce最终将原数据集聚合后生成一个元素

  • 实例

	//reduce 聚合算子 计算数组内两两之差
    val list2 = (1 to 3).toList
    val i = list2.reduce((x: Int, y: Int) => {
      x - y
    })
    /*
    reduce = reduceLeft 从左边开始进行计算
    (1-2) 3 =>  -1 -3 =>-4
     */
    var i3 = list2.reduceRight(_ - _)
    /*
   reduceRight 从右边开始进行计算
   1 (2 -3) => 1 - -1 =>2
    */
    println(i+"\t"+i3)

fold 折叠算子

  • 方法声明
    def foldLeft[B](z: B)(@deprecatedName('f) op: (B, A) => B): B ={}

  • 给定初始值,将源数据集和初始值一起进行折叠

  • fold中有两个参数列表

  • 第一个参数列表用来写集合之外的初始值,代表聚合从给定的初始化值开始

  • 第二个参数列表与reduce相同

  //fold算子
  val list3: List[Int] = (1 to 3).toList
  val i4: Int = list3.foldLeft(100)(_ - _)
  /*
  fold=foldLeft 从左边开始进行计算
  (100-1) 2 3 =>  99 -2 3 => 97 - 3 => 94
   */
  val i5: Int = list3.foldRight(100)(_ - _)
  /*
 foldRight 从右边开始进行计算
 1 2 (100-3) => 1 (2- -97) => 1 -99 => -98
  */
  println(i4 + "\t" + i5)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值