第一章.集合
1.集合基本属性
package com.atguigu.chapter07
object $12_CollectionFields {
def main(args: Array[String]): Unit = {
val list = List(1,3,2,8,10,12)
println(list.contains(100))
println(list.length)
println(list.size)
println(list.mkString("#"))
println(list.isEmpty)
val it = list.toIterator
for (elem <- it) {
println(s"elem=${elem}")
}
println(("-----------------"))
for (elem <- it) {
println(s"elem1=${elem}")
}
println(("-------------"))
val it2 = list.toIterable
for (elem <- it2) {
println(s"elem=${elem}")
}
println("---------------")
for (elem <- it2) {
println(s"elem1=${elem}")
}
}
}
2.衍生集合
package com.atguigu.chapter07
object $13_Collection {
def main(args: Array[String]): Unit = {
val list = List(1,2,3,1,4,5,6,7,8,9)
val list2 = list.distinct
println(list2)
println(list.drop(3))
println(list.head)
println(list.last)
println(list.init)
println(list.tail)
println(list.reverse)
println(list.slice(2, 5))
println(list.sliding(2).toList)
println(list.take(3))
println(list.takeRight(3))
val list3 = List(1,2,3,4,5)
val list4 = List(4,5,6,7,8)
val list5 = list3.intersect(list4)
println(list5)
val list6 = list3.diff(list4)
println(list6)
val list7 = list3.union(list4)
println(list7)
val list8 = List("zhangsan","wangwu","lilei","hanmeimei")
val list9 = List(20,30,40)
val list10 = list8.zip(list9)
println(list10)
println(list10.unzip)
println(list8.zipWithIndex)
}
}
3.集合初级计算函数
package com.atguigu.chapter07
object $14_CollectionLowFunction {
def main(args: Array[String]): Unit = {
val list = List(1,4,2,7,10,8,6)
println(list.max)
println(list.min)
val list2 = List(("zhangsan",20,4500),("wangwu",45,10000),("lisi",18,2000),("wangwu",30,7000))
val func = (x:(String,Int,Int))=>x._3
println(list2.maxBy(func))
println(list2.maxBy((x: (String, Int, Int)) => x._3))
println(list2.maxBy((x) => x._3))
println(list2.maxBy(_._3))
println(list2.minBy(_._2))
println(list.sum)
println(list.sorted)
println(list.sorted.reverse)
println(list2.sorted)
val ordering = new Ordering[Int]{
override def compare(x: Int, y: Int): Int = {
if(x>y) -1
else if(x==y) 0
else 1
}
}
println(list2.sortBy(x => x._2)(ordering))
println(list.sortBy(x => x))
println(list.sortWith((x: Int, y: Int) => x < y))
println(list.sortWith((x: Int, y: Int) => x > y))
}
}
4.集合高级计算函数
package com.atguigu.chapter07
object $15_CollectionHightFunction {
def main(args: Array[String]): Unit = {
val list = List("spark","hello","hadoop","java")
val func = (x:String)=>{
println(s"element=${x}")
x.length
}
val list2 = list.map(func)
println(list2)
val list3:List[List[Int]]=List(
List(1,2,3),
List(4,5,6),
List(7,8)
)
val list4 = list3.flatten
println(list4)
val list5:List[List[List[Int]]]=List(
List(
List(1,2),
List(3,4)
),
List(
List(5,6),
List(7)
)
)
val list6 = list5.flatten
println(list6)
val list7 = List("hello","spark")
println(list7.flatten)
val list8 = List("hello spark hello hadoop","hello python python hadoop","hadoop flume spark")
val list9 = list8.map(x=>x.split(" "))
val list10 = list9.flatten
println(list10)
list8.foreach(x=>println(x))
list8.foreach(println(_))
list8.foreach(println)
val list11 = List(10,2,5,4,3,7,9)
val list12 = list11.filter(x=>x%2==0)
println(list12)
val list13 = List(("zhangsan","man","shenzhen"),("lisi","woman","beijing"),("wangwu","man","beijing"))
val map = list13.groupBy(x=>x._2)
println(map)
val result =list11.reduce((agg,curr)=>{
println(s"agg=${agg} curr=${curr}")
agg+curr
})
println(result)
list11.reduceRight((curr,agg)=>{
println(s"agg=${agg} curr=${curr}")
agg+curr
})
println(("---------------------"))
list11.fold(100)((agg,curr)=>{
println(s"agg=${agg} curr=${curr}")
agg+curr
})
println(("--------------------------"))
list11.foldRight(0)((curr,agg)=>{
println(s"curr=${curr} agg=${agg}")
agg+curr
})
}
}
5.WordCount普通版
package com.atguigu.chapter07
import scala.io.Source
object $16_WordCountLow {
def main(args: Array[String]): Unit = {
val datas = Source.fromFile("datas/wc.txt").getLines().toList
val list = datas.flatMap(line => line.split(" "))
val groupedMap = list.groupBy(x=>x)
val result = groupedMap.map(x => {
(x._1, x._2.length)
})
result.foreach(println)
println("-"*100)
Source.fromFile("datas/wc.txt")
.getLines()
.toList
.flatMap(_.split(" "))
.groupBy(x=>x)
.map(x=>(x._1,x._2.size))
.foreach(println(_))
}
}
6.WordCount高配版
package com.atguigu.chapter07
object $17_WordCountHight {
def main(args: Array[String]): Unit = {
val tupleList = List(("Hello Scala Spark World",4),("Hello Scala Spark",3),("Hello Scala",2),("Hello",1))
val list = tupleList.flatMap(x => {
val arr = x._1.split(" ")
val list = arr.map(y => (y, x._2))
list
})
val groupedMap = list.groupBy(_._1)
val result = groupedMap.map(x => {
val sum = x._2.map(_._2).sum
(x._1, sum)
})
result.foreach(println)
println("-"*100)
tupleList.flatMap(line=>line._1.split(" ").map((_,line._2)))
.groupBy(_._1)
.map(x=>(x._1,x._2.map(_._2).sum))
.foreach(println)
}
}
7.并行集合
package com.atguigu.chapter07
object $18_Par {
def main(args: Array[String]): Unit = {
val list = List(10,3,2,9,7,4)
list.foreach(x=>{
println(s"${Thread.currentThread().getName}---${x}")
})
val list2 = list.par
list2.foreach(x=>{
println(s"${Thread.currentThread().getName}---${x}")
})
}
}
第二章.模式匹配
1.模式匹配定义
package com.atguigu.chapter08
import scala.io.StdIn
object $01_MatchDefined {
def main(args: Array[String]): Unit = {
val wc = StdIn.readLine("请输入一个单词:")
val r = wc match {
case "hadoop" => {
println("输入的是Hadoop")
40
}
case "spark" => {
println("输入的是spark")
30
}
case "flume" =>
val a = 10
val b = 20
val c = a + b
println("输入的是flume")
10
case _ =>
println("其他....")
20
}
println(r)
}
}
2.模式匹配守卫
package com.atguigu.chapter08
import scala.io.StdIn
object $02_MatchIf {
def main(args: Array[String]): Unit = {
val line = StdIn.readLine("请输入一行语句:")
line match {
case x if(x.contains("hadoop"))=>
println("句子包含hadoop")
case x if(x.contains("spark"))=>
println("句子包含spark")
case x if(x.contains("kafka"))=>
println("句子包含kafka")
case x =>
println("其他")
}
}
}
3.匹配值
package com.atguigu.chapter08
import scala.io.StdIn
object $03_MatchValue {
def main(args: Array[String]): Unit = {
val wc = StdIn.readLine("请输入一个单词:")
val Abc = "kafka"
wc match {
case Abc => println("kafka....")
case "hadoop" => println("hadoop....")
case "spark" => println("spark....")
case "flume" => println("flume....")
case abc => println("其他....")
}
}
}
4.匹配类型
package com.atguigu.chapter08
import scala.util.Random
object $04_MatchType {
class Person
def main(args: Array[String]): Unit = {
val list =List(10,2,0,false,"hello",new Person)
val index = Random.nextInt(list.size)
println(s"index=${index}")
list(index) match {
case _:String => println("String....")
case _:Int => println("Int....")
case _:Double => println("Double....")
case _:Person => println("Person....")
case _:Boolean => println("Boolean....")
}
}
}
5.匹配数组
package com.atguigu.chapter08
object $05_MatchArray {
def main(args: Array[String]): Unit = {
val arr = Array("Sxxxxx",10.0,2.5,false,10,1,2,2)
arr match{
case Array(x:String,y:Int,_*)=> println("匹配数组中至少有两个元素,第一个元素是String类型,第二个元素类型是Int")
case Array(_,_*)=> println("匹配数组中至少有一个元素")
case Array(x) => println("匹配数组中只有一个元素")
case Array(x,_,z) => println("匹配数组中有三个元素")
}
}
}
6.匹配列表
package com.atguigu.chapter08
object $06_MatchList {
def main(args: Array[String]): Unit = {
val list:List[Any] =List(1,4,3,2)
list match {
case List(x)=> println("匹配list只有一个元素")
case List(_,_,_)=> println("匹配list有三个元素")
case List(_,_*)=> println("匹配list至少一个元素")
case List(x:String,_*)=> println("匹配一个list至少一个元素")
}
list match{
case x :: Nil => println("匹配list只有一个元素")
case x :: _ :: z :: Nil => println("匹配list有三个元素")
case x :: tail => println("匹配list至少一个元素")
case (x:String) ::tail => "匹配list至少一个元素"
}
}
}