scala map java map_Scala入门:map操作和flatMap操作

76b5ba58fb8e05095d640dfdbd045795.png

【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载!

[返回Spark教程首页]

map操作

map操作是针对集合的典型变换操作,它将某个函数应用到集合中的每个元素,并产生一个结果集合。

比如,给定一个字符串列表,我们可以通过map操作对列表的中每个字符串进行变换,让每个字符串都变成大写字母,这样变换后就可以得到一个新的集合。下面我们在Scala命令解释器中,演示这个过程:

scala> val books = List("Hadoop", "Hive", "HDFS")

books: List[String] = List(Hadoop, Hive, HDFS)

scala> books.map(s => s.toUpperCase)

res0: List[String] = List(HADOOP, HIVE, HDFS)

至于下面的表达式:

s => s.toUpperCase

这种表达式被称为“Lamda表达式”,在Java8以后有引入这种新的特性,Scala也拥有该特性。(备注:前面的“函数式编程”内容有讲到Lambda表达式)

“Lambda表达式”的形式如下:

(参数) => 表达式 //如果参数只有一个,参数的圆括号可以省略

可以看出,Lambda表达式实际上是一种匿名函数,大大简化代码编写工作。s => s.toUpperCase,它的含义是,对于输入s,都都执行s.toUpperCase操作。

flatMap操作

flatMap是map的一种扩展。在flatMap中,我们会传入一个函数,该函数对每个输入都会返回一个集合(而不是一个元素),然后,flatMap把生成的多个集合“拍扁”成为一个集合。

下面我们在Scala解释器中执行下面代码(下面同时包含了解释器运行代码的反馈结果):

scala> val books = List("Hadoop","Hive","HDFS")

books: List[String] = List(Hadoop, Hive, HDFS)

scala> books flatMap (s => s.toList)

res0: List[Char] = List(H, a, o, o, p, H, i, v, e, H, D, F, S)

上面的flatMap执行时,会把books中的每个元素都调用toList,生成List[Char],最终,多个Char的集合被“拍扁”成一个集合。

这里再补充说明一下:上面代码中books flatMap (s => s.toList)这种形式的代码,可以参考之前介绍过的:

a 方法 b

a.方法(b)

上面二者是等价的。所以:

books flatMap (s => s.toList)

books.flatMap(s => s.toList)

上面这二者也是等价的。

对于Lambda表达式“s => s.toList”,左侧的s就是输入参数,右侧的s.toList表示对该参数要执行的操作。

所以:

books flatMap (s => s.toList)

这条语句的含义就是:对于列表books中的每个元素,都执行Lambda表达式定义的匿名函数“s => s.toList”,把一个books元素转换成一个字符集合,比如说,把“Hadoop”这个字符串转换成字符集合List(‘H’,’a’,’d’,’o’,’o’,’p’),把“Hive”字符串转换成字符集合List(‘H’,’i’,’v’,’e’)。最后,flatMap把这些集合中的元素“拍扁”得到一个集合List(‘H’, ‘a’,’d’, ‘o’, ‘o’, ‘p’, ‘H’, ‘i’, ‘v’, ‘e’, ‘H’, ‘D’, ‘F’, ‘S’)。

dafa0ef021bf79cce28e3f06b56d675e.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值