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 映射来完成

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""