博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala之flatMap操作
阅读量:4113 次
发布时间:2019-05-25

本文共 1136 字,大约阅读时间需要 3 分钟。

个人理解

  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操作的。 

 

 

转载地址:http://maesi.baihongyu.com/

你可能感兴趣的文章
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>