scala中地图与flatMap有什么不同

  介绍

这篇文章给大家介绍scala中地图与flatMap有什么不同,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的。没有可变的状态,函数就是引用透明(引用透明性)的和没有副作用(没有副作用)。

任何一种函数式语言中,都有地图函数与faltMap这两个函数,比如python虽然不是纯函数式语言,也有这两个函数。再比如在jdk1.8之后,也加入了λ表达式,自然也支持映射函数。

现在简单说说scala中这两个函数的用法。有一种观点认为将地图和flatMap说成scala函数机制的核心都不为过分,其实是有一定道理的。因为实际中我们使用最多的场景就是对数据进行地图操作或者flatMap操作. map函数的用法,顾名思义,将一个函数传入地图中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。而flatMap与地图唯一不一样的地方就是传入的函数在处理完后返回值必须是列表,其实这也不难理解,既然是flatMap,那除了地图以外必然还有平坦的操作,所以需要返回值是列表才能执行平这一步。

总结:1。地图会将每一条输入映射为一个新对象。{苹果,梨子}。地图(去皮)={去皮苹果,去皮梨子}其中:“去皮”函数的类型为:A=比;B

2。flatMap包含两个操作:会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合。{苹果,梨子}.flatMap(切碎)={苹果碎片1,苹果碎片2,梨子碎片1,梨子碎片2}其中:“切”碎函数的类型为:A=比;List

废话不多说,看一个小例子就明白用法了。

object  collection_t1  {   ,   ,def  flatMap1 ():, Unit =, {   val 才能;li =,列表(1、2、3)   val 才能;res =, li.flatMap (x =祝辞,x  match  {   ,,case  3,=祝辞,列表(& # 39;一个# 39;& # 39;b # 39;)   ,,case  _ =祝辞,列表(x * 2)   })才能   println (res)才能   ,}   ,   ,def  map1 ():, Unit =, {   val 才能;li =,列表(1、2、3)   val 才能;res =, li.map (x =祝辞,x  match  {   ,,case  3,=祝辞,列表(& # 39;一个# 39;& # 39;b # 39;)   ,,case  _ =祝辞x * 2   })才能   println (res)才能   ,}   ,   ,def 主要(args:数组[String]):, Unit =, {   flatMap1才能()   map1才能()   ,}   }

将代码运行起来,最后输出为:

列表(2、4 a, b)
列表(2、4、列表(a, b))

关于scala中地图与flatMap有什么不同就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

scala中地图与flatMap有什么不同