12.1 map
映射操作
有这样一个需求: 请将List(3,5,7)
中的所有元素都* 2
,将其结果放到一个新的集合中返回,即返回一个新的list(6,10,14)
, 请编写程序实现.
package com.atguigu.day11.operate
import scala.collection.mutable
object MapDemo {
def main(args: Array[String]): Unit = {
val list1 = List(1, 2, 3, 4);
// 比较low的做法
val list2 = mutable.MutableList[Int]() // 创建一个可变的List集合
for (elem <- list1) {
list2 += elem * elem
}
println(list2)
// 牛逼一点: for推导
val list3: List[Int] = for(elem <- list1) yield elem * elem
println(list3)
// 高逼格: 函数式编程的做法
val list4: List[Int] = list1.map(compare) // map 接收一个函数, 所以我们传递一个函数进去
println(list4)
}
def compare(a : Int): Int={
a * a
}
}
初步了解高阶函数的概念
在 Scala 中, 函数是一级公民, 所以可以作为参数传递也可以作为参数返回.
package com.atguigu.day11.operate
object HighLevelDemo {
def main(args: Array[String]): Unit = {
def f1(b: Int): Double = {
b * b
}
val d: Double = foo(f1, 10) // 计算出来 10 的平方
println(d)
}
/*
说明:
1. 参数 f
Int => Double, a: Int 表示 f的类型是一个函数,
Int 表示 f 这个函数的参数类型是 Int
Double 表示 f 这个函数的参数类型是 Double
=> 语法格式
2. a: Int 普通的参数
foo 就是一个高阶函数
*/
def foo(f: Int => Double, a: Int): Double = {
// f 既然是函数, 所以我们可以调用他
f(a)
}
}
练习:
请将 val names = List("Alice", "Bob", "Nick")
中的所有单词,全部转成字母大写,返回到一下新的List
集合中.
分别使用 for 推倒 Map 映射来完成