Scala中的map和flatMap

21 篇文章 0 订阅
7 篇文章 0 订阅

Scala中的map和flatMap

list中map和flatMap的实现:

  • map

    • 源码
    abstract class List[T]{ 
    def map[U](f: T => U): List[U] = this match { 
    case first :: last = f(first) :: last.map(f) 
    case Nil = Nil 
    }
    
    • 说明:
      • map会将每一条输入映射为一个新对象。{苹果,梨子}.map(去皮) = {去皮苹果,去皮梨子} 其中: “去皮”函数的类型为:A => B
    • 举例:
    //通过并行化生成rdd
    val rdd1 = sc.parallelize(List(5, 6, 4, 7, 3, 8, 2, 9, 1, 10))
    //对rdd1里的每一个元素乘2然后排序
    val rdd2 = rdd1.map(_ * 2).sortBy(x => x, true)
    //过滤出大于等于十的元素
    val rdd3 = rdd2.filter(_ >= 10)
    //将元素以数组的方式在客户端显示
    rdd3.collect
    
  • flatMap

    • 源码
    def flatMap[U](f: T => List[U]): List[U] = this match{ 
    case x:: xs => f(x) ++ xs.flatMap(f) 
    case Nil => Nil 
    } 
    }
    
    • 说明:
      • flatMap包含两个操作:会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合。 {{蛋糕,面包},{梨子,苹果}}.flatMap(切碎) = {切碎的蛋糕,切碎的面包片,切碎的苹果片,切碎的梨子片} 其中: “切碎”函数的类型为: A => List< B >
    • 举例:
    val rdd1 = sc.parallelize(Array("a b c", "d e f", "h i j"))
    //将rdd1里面的每一个元素先切分再压平
    val rdd2 = rdd1.flatMap(_.split(' '))
    rdd2.collect
    //来个复杂的:
    val rdd1 = sc.parallelize(List(List("a b c", "a b b"), List("e f g", "a f g"), List("h i j", "a a b")))
    //将rdd1里面的每一个元素先切分并压平
    val rdd2 = rdd1.flatMap(_.flatMap(_.split(" ")))
    rdd2.collect
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值