Scala学习——集合的使用和“_”的一些使用(中)

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 }

 

posted @ 2017-02-17 16:28  LazyJoJo  阅读(1422)  评论(0编辑  收藏  举报