---- 聚合操作 聚合操作,可以将一个列表中的数据合并为一个。...这种操作经常用来统计分析中 聚合 reduce reduce表示将列表,传入一个函数进行聚合计算 定义 方法签名 def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1...reduce执行流程分析 [!...NOTE] reduce和reduceLeft效果一致,表示从左到右计算 reduceRight表示从右到左计算 案例 定义一个列表,包含以下元素:1,2,3,4,5,6,7,8,9,10 使用reduce...就是当前要聚合的数据元素 scala> a.reduce(_ + _) res53: Int = 55 // 与reduce一样,从左往右计算 scala> a.reduceLeft(_ + _) res0
Scala的集合体系结构 Scala 中的集合体系主要包括:Iterable、Seq、Set、Map。 其中 Iterable 是所有集合 trait 的根 trait。...Scala 中的集合是分成可变和不可变两类集合的,其中可变集合就是说,集合的元素可以动态修改,而不可变集合的元素在初始化之后,就无法修改了。...ArrayBuffer 就类似于 Java中的 ArrayList。 List List 代表一个不可变的列表。 ...Scala 的集合类的 map、flatMap、reduce、reduceLeft、foreach 等这些函数,就是高阶函数,因为可以接收其他函数作为参数。 ..."a","girlfriend").foreach(println(_)) // zip 练习:对学生姓名和学生成绩进行关联 List("Li", "Hcy", "chy").zip(List(100
在scala中可以方便的实现异步操作,这里是通过Future来实现的,和java中的Future很相似,但是功能更加强大。..., 它会提供一个默认的线程池来异步执行Future。...Future链 有时候我们需要在获得一个Future之后再继续对其进行操作,有点类似于java中的管道,下面看一个例子: println("\nStep 2: Define another method...println(s"Buying vanilla donut was successful = $isSuccess") Thread.sleep(3000) flatmap VS map map就是对集合中的元素进行重映射...当然scala的promise和ES6的promise还是不一样的,我们看下scala中promise是怎么用的: println("Step 1: Define a method which returns
1.格式 [private/protected] def 函数名(参数列表):返回值声明 = {函数体} 2.函数的返回值 1)函数体中return关键字往往可以省略掉,一旦省略掉,函数将会返回整个函数体中最后一行表达式的值..._*_} 2、函数的种类 Scala中的函数分为成员函数、本地函数(内嵌在函数内的函数)、函数值(匿名函数)、高阶函数。...scala中,如果在递归时,保证函数体的最后一行为递归调用,则称这样的递归为尾递归。scala会针对尾递归做优化处理,所以建议在写递归时写成尾递归形式。 ...另外在Spark的源码中有大量运用scala柯里化技术的情况,需要掌握好该技术才能看得懂相关的源代码。 在scala柯里化中,闭包也发挥着重要的作用。...语法介绍 下一篇:Scala中的集合类型
filter和map来实现对List中过滤后元素的具体操作 //下面是将奇数全部加10 scala> a.filter( _ % 2 ==1).map( _ + 10) res26: List[Int...(1, 2, 3, 4) 使用reduceLeft,参数为匿名函数,表示规约的表达式 scala> a.reduceLeft((x,y) => x+y) res31: Int = 10 可以使用下划线通配...scala> s.tail.head res50: Int = 2 Scala中的tuple:元组 //元组的概念,和Python中的元组类似,可以放不用类型的变量 scala> (1,2) res51...> _3operate(a) res56: (Int, Int, Int) = (4,10,30) Scala中的Map //使用类似元组的箭头来定义一个键值对 scala> val p = Map(1...p + ("name" -> "Kim") ^ //正确添加键值对,注意会按Key值覆写键值对,即Key冲突时丢弃原来的Value //有冲突的添加 scala>
Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之外,还有语法层面的,比如 underscore(下划线)就会出现在多种场合,令初学者相当疑惑,今天就来总结下...nums = List(1,2,3,4,5,6,7,8,9,10) nums map (_ + 2) nums sortWith(_>_) nums filter (_ % 2 == 0) nums reduceLeft...(_+_) nums reduce (_ + _) nums reduceLeft(_ max _) nums.exists(_ > 5) nums.takeWhile(_ < 8) 10、偏应用函数...//Range转换为List List(1 to 5:_*) //Range转换为Vector Vector(1 to 5: _*) //可变参数中 def capitalizeAll(args: .../7890032#7890032 [3] Scala中的下划线到底有多少种应用场景?
Set 特性 不重复、无序 不可变set 创建Set& apply方式创建 val set=Set[Int](1,2,3,4,5) 查看setApi 进入 scala $ scala Welcome...++(set2) println(newSet) Set(9, 1, 5, 2, 6, 3, 10, 7, 4, 8) //自动去重 ++= 在原set列表中添加一组元素 val set1: mutable.Set...++=(set2) println(set1) Set(9, 1, 5, 2, 6, 3, 10, 7, 4, 8) // 自动去重 += 在原set列表中添加单个元素 val set1: mutable.Set...--(set2) println(newSet) Set(1, 2, 3, 4) --= 在原set列表中删除一组元素 val set1: mutable.Set[Int] = mutable.Set[...--=(set2) println(set1) Set(1, 2, 3, 4) -=在原set列表中删除一个元素 val set1: mutable.Set[Int] = mutable.Set[Int
函数式编程 将函数赋值给变量 Scala 中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量。...10, 12, 14, 16, 18, 20) reduceLeft: 从左侧元素开始,进行 reduce 操作,即先对元素 1 和元素 2 进行处理,然后将结果与元素 3处理,再将结果与元素 4...(1 to 4).reduceLeft(_ * _) // 相当于 1 * 2 * 3 * 4 sortWith: 对元素进行两两相比,进行排序。...然而,msg 只是一个局部变量,却在 getGreetingFunc 执行完之后,还可以继续存在创建的函数之中。 ...在 Scala 中,return 用于在匿名函数中返回值给包含匿名函数的带名函数,并作为带名函数的返回值。 使用return的匿名函数,是必须给出返回类型的,否则无法通过编译。
第十四章 使用递归的方式去思考,去编程14.1 基本介绍14.2 Scala 提倡函数式编程(递归思想)14.3 应用案例1-求和14.4 应用案例2-求最大值14.5 应用案例3-翻转字符串14.6...14.2 Scala 提倡函数式编程(递归思想) 编程范式 ? 14.3 应用案例1-求和 scala 中循环不建议使用 while 和 do…while,而建议使用递归。...8、实现一个函数,作用与 mkStirng 相同,提示:使用 reduceLeft 实现。 9、给定整型列表lst,(lst :\ List[Int]())(_ :: _)得到什么?...如何修改他们中的一个,以对原列表进行反向排列? 10、编写一个函数,将 Double 数组转换成二维数组。传入列数作为参数。... ((n1: Int, n2: Int) => n1 * n2) // 1 to n reduceLeft ((n1, n2) => n1 * n2) 1 to n reduceLeft
void 块表达式 在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值 *)scala的循环 For 循环 ...来说,运行程序必须main方法中 - 对JAVA语言来说,main method在class类中 public static void main...构造器,也就是说object内部不在method中的代码(并且只执行一次),但是object不能定义接受参数的构造器 4)注意object的构造器只会在第一次调用时执行,以后再次调用不会再执行构造器了...arr.reduce(_-_) //默认使用reduceLeft,从左到右计算 res10: Int = -23 scala> arr.reduceLeft...(_+_) res11: Int = 25 scala> arr.reduceRight(_+_) //表示从列表尾部开始,对两两元素进行求和操作
List[Any] 5) 如果希望得到一个空列表,可以使用 Nil 对象, 在 scala 包对象声明的,因此不需要引入其它包也可以使用 scala val list = List(1,2,3) println...4) 在 scala 中, 有 scala.collection.mutable.Queue 和 scala.collection.immutable.Queue , 一般来说,我们在开发中通常使用可变集合中的队列...中的 Map 和 Java 类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala 中不可变的 Map 是有序的,可变的 Map 是无序的。...(list.reduceLeft(sum)) } //执行相加程序 def sum(n1: Int, n2: Int): Int = { n1 + n2 } } 11、折叠–fold...2) 可以把 reduceLeft 看做简化版的 foldLeft scala object demo5 { def main(args: Array[String]): Unit = {
对序列中所有元素求和 reduceLeft是一个通用的聚集计算方法,你可以把"+"换成其它的运算。其实对于求和有更简单的方法,请参考第6条。...将序列中单词首字母大写 map可以把序列转换成另一个序列,在map方法中定义各个元素的转换过程。...最大值,最小值和求和 这在Scala中轻而易举,直接调用min,max和sum方法。...读取文本文件 在Scala中读取文本文件相当轻松。...其实利用sys.process包,我们可以用Scala编写Shell脚本,是不是很酷!
正如之前所介绍,Spark是用Scala语言编写的,Kafka server端也是,那么深入学习Scala对掌握Spark、Kafka是必备掌握技能。...中列表要么为空(Nil表示空列表)要么是一个head元素加上一个tail列表。...9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表【注意::: 操作符是右结合的,如9 :: 5 :: 2 :: Nil相当于 9 :: (5 :: (2 :: Nil))】...模式匹配和样例类 4.1 模式匹配 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如替代Java中的switch语句、类型检查等。...并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。 // 1.
(3)RDD的重要内部属性 1)分区列表。 2)计算每个分片的函数。 3)对父RDD的依赖列表。 4)对Key-Value 对数据类型RDD的分区器,控制分区策略和分区数。...5)每个数据分区的地址列表(如HDFS上的数据块的地址)。...3)输出:程序运行结束数据会输出Spark运行时空间,存储到分布式存储中(如saveAsTextFile输出到HDFS),或Scala数据或集合中(collect输出到Scala集合,count返回Scala...(7)reduce reduce函数相当于对RDD中的元素进行reduceLeft函数的操作。函数实现如下。...在RDD中,先对每个分区中的所有元素<K,V>的集合分别进行reduceLeft。每个分区形成的结果相当于一个元素<K,V>,再对这个结果集合进行reduceleft操作。
12.4 类型匹配12.5 数组匹配12.6 列表匹配12.7 元组匹配12.8 对象匹配12.9 变量声明中的模式12.10 for表达式中的模式12.11 样例(模板)类12.12 case 语句的中置... 中,可以把一个函数直接赋给一个变量,但是不执行函数,格式:函数名 _ 注意:本质上是将内存地址赋值给栈里面的变量!!! ...化简:将二元函数引用于集合中的函数。 上面的问题当然可以使用遍历 list 方法来解决,这里我们使用 scala 的化简方式来完成。...2、Scala 中 变量声明中的模式 快速入门案例 示例代码如下: package com.atguigu.chapter12.mymatch object MatchVarDemo02 { def...2、Scala 中 for表达式中的模式 快速入门案例 示例代码如下: package com.atguigu.chapter12.mymatch object MatchForDemo01 {
,去掉里层集合,放到外层中来....相当于先进行 map 操作,在进行 flatten 操作 分组 groupBy(分组规则) 按照指定的规则对集合的元素进行分组 Reduce操作: 简化/规约 reduce 对所有数据做一个处理,规约得到一个结果...), List(4, 5, 6), List(7, 8, 9)) println(newList.flatten) // 扁平映射 // 将一组字符串进行分词,并保存成单词的列表...", "hello scala spark", "hello scala spark flink" ) // 对字符串进行拆分 val wordList...集合总结分享到这里就结束了,希望对大家学习Scala语言有所帮助!!!
scala可以自动来推断出来集合中每个元素参数的类型 创建函数时,可以省略其参数列表的类型 示例 有一个列表,包含以下元素1,2,3,4,请使用foreach方法遍历打印每个元素 使用类型推断简化函数定义...如果方法参数是函数,如果出现了下划线,scala编译器会自动将代码封装到一个函数中 参数列表也是由scala编译器自动处理 ---- 映射|map 集合的映射操作是将来在编写Spark/Flink...案例一 创建一个列表,包含元素1,2,3,4 对List中的每一个元素加1 参考代码 ?...案例二 创建一个列表,包含元素1,2,3,4 使用下划线来定义函数,对List中的每一个元素加1 参考代码 ?...对scala感兴趣的朋友可以持续关注哟~
Map 集合 Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。...支持的Api scala> map. + contains foldLeft iterator product...stringPrefix toString ++: copyToBuffer forall keys reduceLeft
集合 scala的集合体系结构 List LinkedList Set 集合的函数式编程 函数式编程综合案例:统计多个文本内的单词总数 scala的集合体系结构 scala中的集合体系主要包括:Iterable...ArrayBuffer就类似于java中的ArrayList List List代表一个不可变的列表 List的创建,val list = List(1,2,3,4) List有head和tail,head...循环将列表中的每个元素都乘以2 scala> val list = scala.collection.mutable.LinkedList(1,2,3,5,6) scala> var currentList...currentList.elem = currentList.elem * 2 | currentList = currentList.next | } 案例:使用while循环将列表中每隔一个元素就乘以...> lines.flatMap(_.split(" ")).map((_,1)).map(_._2).reduceLeft(_ + _) res11: Int = 21 scala> lines.flatMap
foreach()取一个函数,对列表中每一项调用这个函数 map()取一个函数,将一个列表元素转换为另一个值或类型 reduce()取一个函数,将两个列表列表元素结合为一个元素 scala> val colors...sortBy方法指定一个函数时,它会返回一值,用来对列表中的元素排序。 对于性能方面,::, drop, take在列表前面完成,因此不存在性能损失。...collect使用一个偏函数,只对一部分元素应用 flatMap使用一个给定函数转换各个元素,将结果列表扁平化到这个列表中 map使用给定函数转换各个元素 scala> List(0, 1,...比如我们要判断列表中是否包含某个元素。逻辑是这样:如果accumulator是false,那继续判断是否包含,如果包含,更新accumulator,然后下次就不用判断。...> val answer = List(11.3, 23.5, 7.2).reduceLeft(_ + _) (2) answer: Double = 42.0 转换集合 mkString
领取专属 10元无门槛券
手把手带您无忧上云