Scala 中的foreach和map、flatMap方法比较

Scala中的集合对象都有foreach和map、flatMap方法,都是用来遍历当前集合,但他们都有不同点。

这几个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法。

而他们的差异在于:foreach无返回值(准确说返回void),map返回集合对象,flatMap可以返回把嵌套的集合展开

1.map

map的参数是一个函数,List中的每个元素都应用于这个函数,并且返回一个新的集合。

val names=List("a","b","c")
可以用
names.map(_.toUpperCase)
得到List("A","B","C")

2.foreach

foreach和map相似,只不过它没有返回值,foreach只要是为了对参数进行作用。

比如

names.foreach{name=>println(name)}

3.flatmap

接收一个可以处理嵌套列表的函数,然后把返回结果连接起来,将集合扁平化处理

def main(args: Array[String]): Unit = { 
    val spark = SparkSession.builder()
      .master("local")
      .appName("test")
      .getOrCreate()
    val sc = spark.sparkContext

    val increase = (x: Int) => x + 1
    val someNumbers = List(0, 1, 3, 5, 7, 9, 15)
    val b = someNumbers.foreach(increase)
    println(b.getClass)
    val c = someNumbers.map(increase)
    println(c.getClass)
    c.foreach(println)
    c.map(println)

    println("=================")
    val list = List("hello flink", "hello test", "hello test", "getClass hadoop", "world", "spark", "spark")
    val res = sc.makeRDD(list)
    res.flatMap(x => x.split(" "))
      .map(x => (x, 1))
      .reduceByKey(_ + _)
      .foreach(println)
}

见如下代码及运行结果:b.getClass 得到的是void, 而c.getClass得到的是colletion 。foreach和map的运行结果一致。

结论就是:foreach 无法代替map. 而map方法却可以代替foreach

那为什么scala提供foreach和map两个方法呢?

scala做为一种支持函数式编程范式的语言,必然要引入一种机制以支持数学中函数概念,而在数学中函数就是映射,所以scala中有map方法一点都不奇怪。而foreach只是用在不需要对集合执行映射操作,但需要遍历集合时才用到。总而言之,foreach用于遍历集合,而map用于映射(转换)集合到另一个集合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_81D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值