1、空格加_可以表示函数的原型
命令行代码:
scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala> val f = fun1 _ f: String => Unit = $$Lambda$1095/23837627@ae3764 scala> f("spark") spark
2、其他_的使用
1 package com.dtspark.scala.basics 2 /** 3 * 1,在Scala的集合体系中Iterable是共同的trait,Iterable要求继承者实现一些共同的方法,例如对元素的遍历 4 * 2,Array是一个非常基础的数据结构,不从属于Scala集合的体系; 5 * 3,Scala的集合体系中集合分为可变集合和不可变集合 6 * 不可变的集合在Scala.collection.immutable包中, 7 * 可变的集合在Scala.collection.mutable包中 8 * 4,list是元素的列表集合,是不可变的 9 * 第一点,list中的head是指第一个元素,tail是指剩下的元素构成的list集合 10 * 第二点,使用::这个操作符来把list和其他的元素进行组拼来构建新的List 11 * 第三点,如果集合中没有元素的话,此时为Nil;如果list中只有一个元素,那么head就是这个元素本身,tail操作就会放回Nil 12 * 5,LinkedList是元素可变的列表 13 * 6,set是元素不可重复的集合,且元素是无序的,hashSet中的元素不可变,不可重复,不能保证顺序 14 * 7,LinkedHashSet维护元素的插入顺序 15 * 8,sortedSet是排序的集合 16 * 9,"_"在map中的使用 17 * 10,map与flatMap的区别 18 */ 19 object Functional_Iterable { 20 def main(args: Array[String]): Unit = { 21 val range = 1 to 10 22 val list = List(1,2,3,4,5) 23 println(list.head) 24 println(list.tail)//tail是指剩下的元素构成的list集合 25 println(0::list)//把0加在list前 26 27 var linkedList=scala.collection.mutable.LinkedList(1,2,3,4,5) 28 println(linkedList.elem)//取第一个元素 29 println(linkedList.tail) 30 31 while(linkedList!=Nil){ 32 println(linkedList.elem) 33 linkedList=linkedList.tail 34 } 35 36 println(linkedList) 37 val copied = linkedList.+:(9) 38 println(copied) 39 val set =Set(1,2,3,5,4) 40 println(set) 41 42 val setMore =set+1//还是原来的set,因为元素不能重复 43 println(setMore) 44 45 val hashSet = scala.collection.mutable.HashSet(1,2,3)//hashSet中的元素不可变,不可重复,不能保证顺序 46 hashSet+=5 47 hashSet+=50 48 println("hashSet:"+hashSet) 49 50 val linkedHashSet = scala.collection.mutable.LinkedHashSet(1,2,3)//LinkedHashSet维护元素的插入顺序 51 linkedHashSet+=5 52 linkedHashSet+=50 53 linkedHashSet+=4 54 println(linkedHashSet) 55 56 val sortedSet=scala.collection.mutable.SortedSet(1,2,3,5,56,4)//自动排序 57 println(sortedSet) 58 println(List("He is into Spark","Scala is powerful").map { x => x.split(" ")})//一个对象返回一个列表 59 //.map{}.flatten 等于 .flatMap 60 /** 61 *Spark 中 map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象 62 *而flatMap函数则是两个操作的集合——正是“先映射后扁平化” 63 *操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象 64 *操作2:最后将所有对象合并为一个对象 65 */ 66 println(List("He ","spark").map { x => x.split(" ")}.flatten) 67 println(List("He is into Spark","Scala is powerful").flatMap { x => x.split(" ")}.map { x => (x,1) }.map(x=>x._2).reduce((x,y)=>x+y)) 68 println(List("He is into Spark","Scala is powerful").flatMap { _.split(" ")}.map { (_,1) }.map(x=>x._2).reduce(_+_)) 69 println(List("He is into Spark","Scala is powerful").flatMap { x => x.split(" ")}.map { x => (x,1) }.map(_._2).reduce(_+_)) 70 println(List("He is into Spark","Scala is powerful").flatMap { x => x.split(" ")}.map { x => (x,1) }.map(x=>x._2).reduce(_+_)) 71 72 //"_"占位符操作,当=>后面只有一个元素时,可以省略x=>和后面的x,用"_"来表示; x => x.split(" ")可变成_.split(" ") 73 List(0,1,2,3).foreach { x => println(x) } 74 List(0,1,2,3).foreach { println(_) } 75 List(0,1,2,3).foreach { println _ } 76 List(0,1,2,3).foreach { println } 77 List(0,1,2,3).foreach (println) 78 79 } 80 }