匿名函数演示
package date0813.sample01_AnonymousFunDemo
/**
* Description;匿名函数演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 15:51
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object AnonymousFunDemo {
//方法的关键字是def,函数的关键字是var,方法和函数之间可相互转换,通过 _
var f = () => println("这是一个无参的函数")
def main(args: Array[String]): Unit = {
val x, y = 3
// println(s"x=$x,y=$y")
//调用包含函数类型的方法
var result=twoNumOperate(x,y,(x,y)=>x+y)
println(s"$x+$y=$result")
println("\n_______________________________________\n")
result=twoNumOperate(x,y,(x,y)=>x-y)
println(s"$x-$y=$result")
println("\n_______________________________________\n")
//定义一个函数,myFun
val myFun=(x:Int,y:Int)=>x*y
result=twoNumOperate(x,y,myFun)
println(s"$x*$y=$result")
}
//设计一个方法,该方法要求对两个整数进行操作(+,-,*,/)
def twoNumOperate(x:Int,y:Int,f:(Int,Int)=>Int)={
f(x,y)
}
}
运行效果
方法转换函数演示
package date0813.sample02_Method2FunDemo
/**
* Description:方法转换成函数演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 19:34
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object Method2FunDemo {
def main(args: Array[String]): Unit = {
//方式1:调用一个方法时,若该方法包含函数类型的形参,可以直接传入方法,内部自动将方法转换成函数(隐式转换)
var result = commonMethod(2, 4, add)
//add的类型必须要与函数的类型保持一致
println(s"result=$result")
//方式2:调用一个方法时,若该方法包含函数类型的形参,那么,可以先将待传入的方法通过神奇的下划线转换为函数
//在方法后面加上空格和_
result = commonMethod(3, 5, add _)
println(s"result=$result")
}
//自定义方法之求两个数的和
def add(x: Int, y: Long): Double = (x + y).toDouble
//自定义方法包含函数
def commonMethod(x: Int, y: Long, f: (Int, Long) => Double): Double = {
f(x, y)
}
}
运行效果
可变集合ArrayBuffer演示
package date0813.sample03_array
import scala.collection.mutable.ArrayBuffer
/**
* Description:可变数组之ArrayBuffer演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 20:03
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object ArrayBufferDemo {
def main(args: Array[String]): Unit = {
//ArrayBuffer需要导入这个类,Any相当于java中的Object,局限于泛型
val container = ArrayBuffer[Any]()
//+= 向Arraybuffer添加一个元素
container +=2
println(s"可变长数组中的元素是:$container")
// 小括号中有多个元素组成元祖
container +=(3,4,5)
println(s"可变长数组中的元素是:$container")
//++= 将两个集合合并为一个集合
container ++=Array(7,8,9)
println(s"可变长数组中的元素是:$container")
//append 调用append方法添加一个元素
container.append(10,11,12)
println(s"可变长数组中的元素是:$container")
//trimEnd 从末尾数消除一个元素
container.trimEnd(1)
println(s"可变长数组中的元素是:$container")
//trimStart 从开头数消除两个元素
container.trimStart(2)
println(s"可变长数组中的元素是:$container")
//remove 消除小标为0的元素
container.remove(0)
println(s"可变长数组中的元素是:$container")
//insert 从下标为3的开始插入元素"ok",true,"you" 数据类型可以不一样
//这些可变数组走可以参考可变参数进行思考
container.insert(3,"ok",true,"you")
println(s"可变长数组中的元素是:$container")
}
}
运行效果
不可变Array演示
package date0813.sample03_array
/**
-
Description:xxx
-
Copyright©:Minchen
-
This program is protected by copyright laws.
-
Date: 2019/8/13 星期二 20:06
-
@author:Minchen
-
@Email:751914788 @qq.com
-
@version 1.0
*/
object ArrayDemo {
def main(args: Array[String]): Unit = {
//需求1:定义一个长度是5的Int型的数组
val nums=new ArrayInt
//遍历
for(perEle<- nums)
println(perEle)println(s"数组中的最后一个元素: n u m s ( n u m s . l e n g t h − 1 ) " ) n u m s ( 0 ) = 88 p r i n t l n ( s " 数 组 中 的 第 一 个 元 素 : {nums(nums.length-1)}") nums(0)=88 println(s"数组中的第一个元素: nums(nums.length−1)")nums(0)=88println(s"数组中的第一个元素:{nums(0)}")
println(s"数组中的最后一个元素:${nums(nums.length-1)}")println("\n_______________________________\n")
//需求2:向定长数组中存入指定的元素
val names=ArrayString
println(s"打印names中的元素:${names.toBuffer}")println("\n_______________________________\n")
//需求3:向定长数组中存入不同类型的元素
val stu=Array(“zhangsan”,true,189.34)
println(s"stu中的元素是:${stu.toBuffer}")
}
}
运行效果
可变Map演示
package date0813.sample04_map
import scala.collection.mutable
/**
* Description:可变的Map映射演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 20:55
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object MutableMapDemo {
def main(args: Array[String]): Unit = {
//需求:构建可变的Map映射的实例,并初始化,然后向其中添加元素,移除元素,遍历
//需要导入个mutable包
var stus = mutable.Map[String, Int]("张三丰" -> 88, "张学友" -> 100, "张靓颖" -> 18)
println(s"Map映射中的元素是:$stus")
println("______________________________________")
//①添加新的元素
stus("张三丰") = 100
stus.update("Andy", 100)
println(s"Map映射中的元素是:$stus")
println("____________________________")
//②连续添加多个元素
//1)元组方式
stus += ("panchaosheng" -> 22, "cengzuojiang" -> 38, "xiaogaobing" -> 28)
println(s"Map映射中的元素是:$stus")
// ++= 这个方式是将两个集合合并
val stus2 = mutable.Map("minchen" -> 18, "haiping" -> 18)
stus ++= stus2
println(s"Map映射中的元素是:$stus")
//①移除元素
stus -= "张三丰"
println(s"Map映射中的元素是:$stus")
println("_____________________________________")
//④遍历Map映射
//根据键来遍历
for (perEle <- stus.keySet)
println(perEle + "\t" + stus(perEle))
println("\n_______________________________________\n")
//b)使用元组
for ((k, v) <- stus)
println(k + "\t" + v)
}
}
运行效果
不可变的Map演示
package date0813.sample04_map
/**
* Description:不可变的Map映射演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 20:45
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object sample04_map {
def main(args: Array[String]): Unit = {
val students = Map("andy"-> 90,"leon"-> 80,"marry"->18)
val ele = students("andy")
val value=students.get("leon").get
println(s"value=$value")
//给marry设置个默认值,如果students中有marray,则是其对应的值,如果没有则是默认值0
val value2=students.getOrElse("marry",0)
println(s"value2=$value2")
//下述的语法编译报错:不可变的Map映射不能添加新的元素
// students("kate") = 80
}
}
运行效果
元组及zip演示
package date0813.sample05_TupleDemo
/**
* Description:元组演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/13 星期二 21:32
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object TupleDemo {
//方法,返回多个值,可以将多个值封装到元组中一并返回
def getValue: (Int, Boolean) = {
val value1=90
val value2=true
(value1,value2)
}
def main(args: Array[String]): Unit = {
println("\n_____________________________________________\n")
//元组是一一对应的值
val t, (a, b, c, d) = (1, true, 20, ("jack", 89))
println(s"元组中第二个元素是:${t._2}")
println(s"元组中第二个元素是:$b")
println(s"元组中第四个元素中的第二个元素是:${t._4._2}")
println(s"元组中第四个元素中的第二个元素是:${d._2}")
println("\n_____________________ ________________________\n")
//拉链操作
val names = Array("jack", "marry", "tom", "andy")
val ages = Array(19, 29, 18, 18, 16)
//注意泛型的类型,要用括号括起来
val stuInfo:Array[(String,Int)]=names.zip(ages)
println(s"使用拉链操作合并后,新的数组中的元素是:${stuInfo.toBuffer}")
//拉链操作的适用场景
val ages2 = Array(19, 29, 18)
val heights = Array(192, 178.89, 166.89)
val weights = Array(89, 48.89, 66.89)
val result: Array[((Int, Double), Double)] = ages2 zip heights zip weights
val studentInfs: Array[(Int, Double, Double)] = result.map(perEle => (perEle._1._1, perEle._1._2, perEle._2))
println(s"学生的信息是:${studentInfs.toBuffer}")
}
}
运行效果
不可变List演示
package date0813.sample06_list
/**
* Description:不可变的List集合演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/14 星期三 08:52
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object ImmutableListDemo {
def main(args: Array[String]): Unit = {
var lst=List(1,2)
// a)将元素添加到列表之前
// 元素::列表 等价于 List列表的实例.::(元素)
// 等价于 +:
val lst2=0::lst
println(s"元集合是:$lst,新集合是:$lst2")
println("\n___________________________________\n")
// b)将元素添加到列表的后面
// :+
val lst3 =lst:+3
println(s"元集合是:$lst,新集合是:$lst3")
println("\n___________________________________\n")
// c)将两个List集合合并成新的List集合
// ++
val lst4=lst++ List(3,4)
println(s"元集合是:$lst,新集合是:$lst4")
println("\n___________________________________\n")
// d)将指定的集合添加到源集合之前
// ++:
println("\n___________________________________\n")
val lst5 = List(3, 4) ++: lst
println(s"新的集合是:$lst5")
println("\n___________________________________\n")
// e)将指定的集合添加到源集合之后
// .:::
val lst6=List(3,4).:::(lst)
println(s"新的集合是:$lst6")
}
}
运行效果
可变List演示
package date0813.sample06_list
import scala.collection.mutable.ListBuffer
/**
* Description:可变的List集合演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/14 星期三 17:31
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object MutableListDemo {
def main(args: Array[String]): Unit = {
val container = ListBuffer[Any]()
//常用方法
// a) 向指定的ListBuffer中新增元素
// append
// +=
container.append("jack")
container +="marray"
println(s"可变的ListBuffer中的元素是:$container")
println("________________________________________________")
// b) 将一个ListBuffer中的元素取出来,追加到当前ListBuffer中
// ++=
container++=ListBuffer("marry","张三丰")
println(s"可变的ListBuffer中的元素是:$container")
println("________________________________________________")
// c) 将两个ListBuffer合并起来,生成一个全新的ListBuffer
// ++
val newContainer:ListBuffer[Any]=container ++ ListBuffer("marry","孤独求败")
println(s"可变的ListBuffer中的元素是:$newContainer")
println("________________________________________________")
// d)将 元素添加到ListBuffer的末尾,生成一个全新的ListBuffer(原来的ListBuffer没有发生变化)
// :+
val newContainer2: ListBuffer[Any]=container :+ "tom"
println(s"新的可变的ListBuffer中的元素是:$newContainer2,旧的ListBuffer元素是:$container")
}
}
运行效果
Set演示
package date0813.sample07_set
import scala.collection.mutable
/**
* Description:Set集合用法演示<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/14 星期三 19:33
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object SetDemo extends App {
//1)不可变的Set集合
val container = Set[Int]()
// +
val container2 = container + 2
println(s"源集合中的元素是:$container,新的集合container2中的元素是:$container2 ")
println("\n______________________________________\n")
// ++
val container3 = container2 ++ Set(3, 4, 2, -9, -7, 12, 10)
println(s"源集合中的元素是:$container2,新的集合container3中的元素是:$container3 ")
println("\n_____________ +++++++++++++++++++++++_________________________\n")
//2)可变的Set集合
val names = mutable.Set[String]()
// +=
names += "jackson"
println(s"源集合中的元素是:$names ")
// ++
val names2: mutable.Set[String] = names ++ Set("marry")
println(s"源集合中的元素是:$names,新的集合中的元素:$names2 ")
// add
names.add("jerry")
println(s"源集合中的元素是:$names")
// -=
names -= "jerry"
println(s"源集合中的元素是:$names")
// remove
val result = names.remove("jackson2")
println(s"移除成功否?$result,源集合中的元素是:$names")
}
效果演示
集合常用的方法演示
package date0813.sample08_collection
/**
* Description:xxx<br/>
* Copyright(c):Minchen<br/>
* This program is protected by copyright laws.<br/>
* Date: 2019/8/14 星期三 19:42
*
* @author:Minchen
* @Email:751914788 @qq.com
* @version 1.0
*/
object CollectionDemo extends App {
val nums = Seq(1, 2, 3, 4, 5)
//常用方法
// sum:求和
println(s"集合中所有元素的和是:${nums.sum}")
println("\n___________________________________\n")
// max:最大值
println(s"集合中最大值是:${nums.max}")
println("\n___________________________________\n")
// min:最小值
println(s"集合中最小值是:${nums.min}")
println("\n___________________________________\n")
// count:计数
//满足条件的计数
println(s"集合中偶素元素个数是:${nums.count(_ % 2 == 0)}")
println(s"集合中元素个数是:${nums.size}")
println("\n___________________________________\n")
// minBy & maxBy 方法解决了复杂数据的问题。你只需选择决定数据最大或最小的属性(case修饰的类称之为样例类,编译器会为其生成诸多的源码:如,序列化,伴生类,伴生对象等等)
val books: Seq[Book] = Seq(Book("十万个为什么", 1000), Book("Hadoop", 900), Book("Spark", 1299))
//指定按什么排序
//需求:求出页码最多、最少的图书的信息
println(s"页码最多的图书的信息:${books.maxBy(_.pageNum)}")
println(s"页码最少的图书的信息:${books.minBy(_.pageNum)}")
println("\n___________________________________\n")
// filter
//需求:筛选出图书的页码>=1000的图书信息
//这个是简化版的
//books.filter(_.pageNum >= 1000).foreach(println)
books.filter(perEle => perEle.pageNum >= 1000).foreach(println)
println("\n___________________________________\n")
//flatten:压平,使用该方法的前提是集合中每个元素的类型是集合类型,作用:将所有子集合中的元素拿出来置于一个新的集合找那个存储起来。
val eles: Seq[Array[Int]] = Seq(Array(1, 2), Array(3, 4))
val result: Seq[Int] = eles.flatten
println(s"集合经过flatten操作后,结果是:$result")
println("\n___________________________________\n")
//求差集,交集,并集
val nums1 = Seq(1, 2, 3)
val nums2 = Seq(3, 4, 5)
println(s"两个集合的差集是:${nums1.diff(nums2)}") //1,2
println(s"两个集合的交集是:${nums1.intersect(nums2)}") //3
println(s"两个集合的并集是:${nums1.union(nums2)}") //1, 2, 3 ,3, 4, 5
println(s"两个集合去重之后的并集是:${nums1.union(nums2).distinct}") //1, 2, 3 ,3, 4, 5
println("\n___________________________________\n")
//flatMap:= map + flatten,先进行map操作,然后进行flattern。
//map函数 + 合并函数 = flatMap函数
val names = Array("jack", "tom", "marry")
//List[JACK,jack,TOM,tom,MARRY,marry]
println(s"${names.flatMap(perEle => List(perEle.toUpperCase, perEle)).toBuffer}")
val numsTmp = Seq(1, 2, 3)
val finalResult = numsTmp.flatMap(perEle => Array(Math.pow(perEle, 2))).sum
println(s"最终的结果是:$finalResult")
}
/**
* 样例类
*
* @param title
* @param pageNum
*/
case class Book(title: String, pageNum: Int)