Scala

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")
  }
}
上一篇 下一篇

猜你喜欢

热点阅读