scala-18-集合操作之映射
2020-04-06 本文已影响0人
chen_666
高阶函数
object HighOrderFunDemo01 {
def main(args: Array[String]): Unit = {
//使用高阶函数
val res = test(sum2 _, 3.5)
println("res=" + res)
//在scala中,可以把一个函数直接赋给一个变量,但是不执行函数
val f1 = myPrint _
f1() //执行
}
def myPrint(): Unit = {
println("hello,world!")
}
//说明
//1. test就是一个高阶函数
//2. f: Double => Double 表示一个函数, 该函数可以接受一个Double,返回Double
//3. n1: Double 普通参数
//4. f(n1) 在test函数中,执行 你传入的函数
def test(f: Double => Double, n1: Double) = {
f(n1)
}
//普通的函数, 可以接受一个Double,返回Double
def sum2(d: Double): Double = {
println("sum2被调用")
d + d
}
}
map映射函数
object MapOperateDemo02 {
def main(args: Array[String]): Unit = {
/*
/*
请将List(3,5,7) 中的所有元素都 * 2 ,
将其结果放到一个新的集合中返回,即返回一个新的List(6,10,14), 请编写程序实现.
*/
*/
val list = List(3,5,7,9)
//说明 list.map(multiple) 做了什么
//1. 将list这个集合的元素 依次遍历
//2. 将各个元素传递给 multiple 函数 => 新Int
//3. 将得到新Int ,放入到一个新的集合并返回
//4. 因此multiple 函数调用3
val list2 = list.map(multiple)
println("list2=" + list2) //List(6,10,14)
//深刻理解map映射函数的机制-模拟实现
val myList = MyList()
val myList2 = myList.map(multiple)
println("myList2=" + myList2)
}
def multiple(n:Int): Int = {
println("multiple 被调用~~")
2 * n
}
}
//深刻理解map映射函数的机制-模拟实现
class MyList {
val list1 = List(3,5,7,9)
//新的集合
var list2 = List[Int]()
//写map
def map(f: Int=>Int): List[Int] = {
//遍历集合
for (item <- this.list1) {
//如果item是一个集合
if (f(item) == true) {
list2 = list2 :+ item
}
}
list2
}
}
object MyList {
def apply(): MyList = new MyList()
}
flatMap
object FlatMapDemo01 {
def main(args: Array[String]): Unit = {
val names = List("Alice", "Bob", "Nick")
//需求是将List集合中的所有元素,进行扁平化操作,即把所有元素打散
val names2 = names.flatMap(upper)
println("names2=" + names2)
}
def upper( s : String ) : String = {
s. toUpperCase
}
}
filter
object FilterDemo01 {
def main(args: Array[String]): Unit = {
/*
选出首字母为A的元素
*/
val names = List("Alice", "Bob", "Nick")
val names2 = names.filter(startA)
println("names=" + names)
println("names2=" + names2)
}
def startA(str:String): Boolean = {
str.startsWith("A")
}
}