看一个简单的题目:
将List(3,5,7)种的所有元素都乘以二。代码实现:
def main(){ val list = List(3, 5, 7) val list2 = list.map(nultiple) println(list2) } def multiple(n:Int): Int = { 2 * n }list.map(nultiple) 分析:
遍历 list 集合的元素将各个元素传递给 multiple 函数,得到新的值将新值放到一个新的集合并返回multiple 函数在上面的代码种被调用3次编写一个程序,模拟map映射函数的底层工作原理。 其实就是遍历一个集合,在遍历的过程中对每个元素进行相应的处理。
object MapTest { def main(args: Array[String]): Unit = { val myList = MyList() val myList2 = mylist.map(multiple) println("myList2=" + myList2) } } class MyList { val list1 = List(3, 5, 7) var list2 = List[Int]() //写map函数 //f:Int => Int 表示传入一个函数,这个函数接受一个Int,并返回一个Int def map(f:Int => Int): List[Int] = { //遍历集合,进行相应的处理 for(item <- this.list1){ list2 = list2 :+ f(item) } } } object MyList { def apply(): MyList = new MyList() }小测试:将List(“Alice”, “Bob”, “Jack”) 中的所有字母都转换为大写:
val names = List("Alice", "Bob", "Jack") val upNames = names.map(_.toUpperCase)过滤:将符合要求的数据(筛选)放置到新的集合中
将List(“Alice”, “Bob”, “Jack”) 中首字母为”A“的筛选到新的集合:
val AName = names.filter(_.startsWith("A"))扁平化,将集合中的每个元素的子元素映射到某个函数并返回新的集合
将List(“Alice”, “Bob”, “Jack”) 中的所有字母都转换为大写,并将集合中的元素扁平化:
val names = List("Alice", "Bob", "Jack") val flatUpNames = names.flatMap(_.toUpperCase)将List(“Alice”, “Bob”, “Jack”) 中的所有字母扁平化输出:
val names = List("Alice", "Bob", "Jack") val flatNames = names.flatMap(_.split(""))以 “ “为分隔符,将集合中的元素扁平化输出