(转)scala中map与flatMap浅析】的更多相关文章

在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合.由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的.没有可变的状态,函数就是引用透明(Referential transparency)的和没有副作用(No Side Effect). 任何一种函数式语言中,都有map函数与faltMap这两个函数,比如Python虽然不是纯函数式语言,也有这两个函数.再比如在jdk1.8之后…
作为spark初学者对,一直对map与flatMap两个函数比较难以理解,这几天看了和写了不少例子,终于把它们搞清楚了 两者的区别主要在于action后得到的值 例子: import org.apache.spark.{SparkConf, SparkContext} object MapAndFlatMap { def main(args: Array[String]): Unit = { val sc = new SparkContext(new SparkConf().setAppName…
map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回 map函数的源码: def map(self, f, preservesPartitioning=False): """ Return a new RDD by applying a function to each element of this RDD. >>> rdd = sc.parallelize(["b", "a", &quo…
scala中Set包含可变set和不可变Set,set的子类HashSet,各有一个扩展了可变和不可变的set特质.  可变set import scala.collection.mutable.Set val movieSet=Set("Hitch","Poltergeist") movieSet+="Shrek" println(movieSet) // Set(Chilies, Tomatoes, Coriander) 不可变set imp…
map和flatMap是函数式编程中常见的概念,python等语言中都有.借助于 map和flapMap 函数可以非常轻易地将数组转换成另外一个新数组. map函数可以被数组调用,它接受一个闭包作为參数,作用于数组中的每一个元素.闭包返回一个变换后的元素.接着将全部这些变换后的元素组成一个新的数组. 简单的说. map就是映射函数,把一个集合映射成还有一个集合. Swift的flatMap不easy理解,flatMap非常像map函数,可是它摒弃了那些值为nil的元素. flatMap是在处理一…
/** * Created by root * Description : Tuple and Map */ object MapTest { def main(args: Array[String]): Unit = { // 元组:Tuple,就是由()包起来,和数据库中一条记录概念类似 val t1 = (1,2) println(t1) println(t1._1) // 获取tuple第一个元素 println(t1._2) // 获取tuple第二个元素 val t2 = (1,"x…
假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],对于这样的需求,我们可能想到的第一个版本可能是这样子的: words.stream() .map(word -> word.split("")) .disti…
import scala.collection.mutable /** * Map集合的简单使用 */ object MapUse { def main(args: Array[String]): Unit = { // 创建一个空的map -- 注意:这里要用实现类,因为Map是抽象类,使用时需要声明具体实现类 val emptyMap = new mutable.HashMap[String,Int]() println(emptyMap) // Map() // 不可变Map val im…
在scala中Map分为可变长(mutable)和不可变长(immutable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过箭头的方式创建map val map = Map(, "sex" -> "男") // 通过对偶元组的方式创建map val map1 = Map((), ("sex", "女")) // 通过两者混搭创建map val map3 = Map("name…
前两篇Android RxJava的使用(一)基本用法.Android RxJava的使用(二)Action介绍了RxJava的基本用法,对Rxjava还不了解的请先看以上两篇.这篇为大家讲解RxJava中map和flatMap的使用. 参考:给 Android 开发者的 RxJava 详解(本文部分内容引用自该博客) 回顾 前两篇为大家介绍了使用RxJava打印多个字符串的方法 Observable.just("Hellow", "Wrold").subscrib…
在scala中Map分为可变长(mutable)和不可变长(imtable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过对偶元组的方式创建map val map = Map("name" -> "leo", "age" -> 16, "sex" -> "男") // 通过箭头的方式创建map val map1 = Map(("name"…
今天我们来学习一下如何使用for表达式实现map.flatMap以及filter 首先,我们来看下map.map的功能是,传入一个list,通过一个函数f,将list中的元素A变成元素B的过程.最后得到由B形成的列表.这个过程如果由for循环实现的话,如下操作: for(element <- list) yield f(element) 接下来我们看下flatMap.flatMap的功能是,传入一个list,通过一个函数f,将list中的每个元素转换成一个列表,最后返回由这些列表中的所有元素构成…
1. map函数   对集合的每一个元素运用某个函数操作,然后将结果作为一个新的列表返回. 实例1:将列表中每个元素值乘以2 scala> val list1=List(1,2,3,4) list1: List[Int] = List(1, 2, 3, 4) scala> list1.map(_*2) res54: List[Int] = List(2, 4, 6, 8) 另一种写法: scala> list1.map(x=>x*2) res55: List[Int] = List…
map,flatMap,zip和reduce函数可以让我们更容易处理列表函数. 1 map函数map将一个函数应用于列表的每一个元素并且将其作为一个新的列表返回.我们可以这样对列表的元素进行平方: scala> list1 res3: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) scala> list1.map(x=>x*x) res4: List[Int] = List(0, 1, 4, 9, 16, 25, 36, 49, 6…
我之前一直以为我是懂 map 和 flatMap 的.但是直到我看到别人说:「一个实现了 flatMap 方法的类型其实就是 monad.」我又发现这个熟悉的东西变得陌生起来,本节烧脑体操打算更细致一些介绍 map 和 flatMap,为了下一节介绍 monad 做铺垫. 准备运动:基础知识 数组中的 map 和 flatMap 数组中的 map 对数组元素进行某种规则的转换,例如: let arr = [1, 2, 4] // arr = [1, 2, 4] let brr = arr.map…
转自https://blog.csdn.net/wynjauu/article/details/78741093 假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"], 对于这样的需求,我们可能想到的第一个版本可能是这样子的: words…
转自:map和flatmap的区别 对于stream,   两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为null的时候其实就是0个元素). flatmap的意义在于,一般的java方法都是返回一个结果,但是对于结果数量不确定的时候,用map这种java方法的方式,是不太灵活的,所以引入了flatmap. 对于Optional的map和flatmap: map是把结果自动封装成一个Optional,但是f…
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map特点: api不太丰富 如果是var修饰,引用可变,支持读写 如果是val修饰,引用不可变,只能写入一次值,其后只读 var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化构造函数 a += ("k3"->3)//添加元素…
之前对这两个概念有点糊,今天正好遇到一个相关需求,才深入了解了下. 需求如下: 大概就是对一个数组的model,重构成一个新model,返回得到一个新数组 用map很容易实现,不过后来我需要对其中进行一些过滤处理,这样,用map就不行了,幸好,flatMap可以满足我的需要. 其中原因归纳如下: map是对原对象所有元素进行一对一转换处理,中间不会跳过或遗漏,包括nil元素 flatMap更灵活,可变换维度,也能够自动解包,所以当我们对不符合元素,返回nil,最终的结果是过滤掉nil的,从而能够…
forall 对集合中的元素进行某个判断,全部为true则返回true,反之返回false. 例如: scala> var s = List("hello", "world") s: List[String] = List(hello, world) scala> s.forall( f => f.contains("h") ) res34: Boolean = false scala> s.forall( f =>…
Scala中的集合对象都有foreach和map两个方法.两个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法.而两者的差异在于:foreach无返回值(准确说返回void),map返回集合对象.见如下代码及运行结果:b.getClass 得到的是void, 而c.getClass得到的是colletion .再看代码的第9-11行,foreach和map的运行结果一致.结论就是:foreach 无法代替map. 而map方法却可以代替foreach. 问题:为什么scala提供…
1.map和flatMap都是接受一个函数作为参数(Func1) 2.map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据 3.flatMap函数也只有一个参数,也是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据,不过这里O为Observable类型 map实例 这里map里面直接对参数处…
1. Map集合 1.1 Scala中的Map介绍 Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的. Scala中,有可变Map (scala.collection.mutable.Map) 和 不可变Map(scala.collection.immutable.Map) 1.2 构建map 构建不可变map ​ Scala中的不可变Map是有序,构建Map中的元素底层是Tuple2…
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.split(" ")).map(_,1).reduceByKey(_ + _)........ 这种风格的编程方法叫做链式调用,它的实现方法见下面的代码: class Animal {def breathe : this.type = this}class Cat extends Animal…
本章主要分析Scala中List的用法,List上可进行的操作,以及需要注意的地方. 一.List字面量 首先看几个List的示例. val fruit = List("apples", "oranges", "pears") val nums = List(1, 2, 3, 4) val diag3 = List( List(1, 0, 0), List(0, 1, 0), List(0, 0, 1) ) val empty = List()…
今天来学一下scala中的For表达式的用法. package scala.learn case class Persons(name:String,isMale:Boolean,children:Persons*) object Test_85 {  def main(args:Array[String]){        val lauren = Persons("Lauren",false)    val rocky = Persons("Rocky",tru…
/** * Created by root * Description : List */ object ListTest { def main(args: Array[String]): Unit = { println() } val a = List(1,2,3,4) for (i <- a) println(i) // 将0添加到a中 val b = 0::a for (i <- b) println(i) val c = List("x","y"…
定义不带参数也不带返回值的函数(def :定义函数的关键字  printz:方法名称) scala> def printz = print("scala hello")   定义带参数也带返回值的函数(这种函数在定义时也可以不带返回值的类型,scala会自动推算出.建议还是带上) scala> def minNum(x:Int,y:Int):Int = if(x>y) x else y //:Int 是该函数的返回值类型 minNum: (x: Int, y: Int…
集合最重要的继承路线 —— Traversable -> Iterable -> Seq -> LinerSeq -> List Traversable 中的公有方法: 分类 方法 相加操作  ++ 大小信息  isEmpty,nonEmpty,size和hasDefiniteSize 元素测试  exists,forall和count 元素检索  head,last,headOption,lastOption和find 转换操作  toArray,toList,toIterabl…
前言....... 随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue,带你走入异步编程的大门. Future 很多同学可能会有疑问,Futrue跟异步编程有什么关系?从Future的表面意思是未来,一个Future对象可以看出一个将来得到的结果,这就和异步执行的概念很像,你只管自己去执行,只要将最终的结果传达给我就行,线程不必一直暂停等待结果,可以在具体异步任务执行…