Scala之flatMap操作

个人理解

  1. 调用flatMap方法的是一个可迭代集合(注意:字符串是一个可迭代集合,字符串中的元素为字符)
  2. 什么类型调用的flatMap方法,则返回的也是什么类型
  3. flatMap = map + flatten 即先对集合中的每个元素进行map,再对map后的每个元素(map后的每个元素必须还是集合)中的每个元素进行flatten
  4. 进行map的对象可以是只含一层的集合,但进行flatten操作的对象必需是至少含两层的集合

实例讲解

实例一:

var str = "string"
str.foreach(c => printf("%c ", c)) #输出结果:s t r i n g 

以上结果表明:字符串是可迭代的集合 

实例二:

var words = Set("hive", "hbase", "redis")
val result = words.flatMap(x => x.toUpperCase)
println(result) // 输出结果:Set(E, A, I, V, B, H, R, D, S)
  1. 调用flatMap方法的是一个Set集合,明显可迭代
  2. 调用flatMap方法的是一个Set集合,则最终返回的也应该是一个Set集合
  3. 先对words中的每个元素调用toUpperCase方法(该方法是字符串的方法,字符的对应转换为大写方法为toUpper),map的结果应该变为Set["HIVE", "HBASE", "REDIS"],接下来进行flatten;对于map后的每个元素中的每个元素进行flatten,"HBASE"中的每个元素依次为: 'H' 'B' 'A' 'S' 'E' 因为最终是返回一个set,也就是将这些元素全部放入set中。所以最后的结果显而易见了。
  4. words对象为一个含两层的集合(第一次遍历可以得到每个字符串,第二层遍历可以得到每个字符串所对应的字符),即使将words对象每个元素进行转换大写后,仍然为一个两层集合,所以可以进行flatMap操作

实例三:

如果是上面这个例子,由于words中每个元素为字符,已经无法再分离了,因此此时的words为一层集合,无法进行flatMap操作,所以编译会报错

实例四:

var words = Set(List('s', 'c', 'd'), List('d', 'c'))
println(words.flatMap(x => x.tail)) // 输出结果:Set(c, d)

而对于上面这个例子,却是可以正确输出的。原因:words中的每个元素为一个List,而List是可迭代的,所以words至少是一个含两层的集合,因此words对象是可以进行flatMap操作的。 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值