《scala函数式编程》之Map和Tuple

package lyzx.com.basic.day02

/**
  * Map 和Tuple
  */
class T2{
  /**
    * 创建Map 和java中的Map作用一样
    * 不可变Map
    */
  def f1(): Unit ={
    //创建不可变的集合,即集合一旦创建,则其值不能改变,下面是创建集合的2中方式
    val m1 = Map("k1"->"v1","k2"->"v2")
    val m2 = Map(("k3","v3"),("k4","v4"))

//    m1("k1") = "modify"
//    m2("k5")="v5"
    println(m1 +"    "+m1.getClass.getName)
    println(m2 + "    "+m2.getClass.getName)

    println("==>"+m1("k1"))

    //注意如果在某个map中不存在键时会报错
//    println(m1("kk"))

    //1、通过判断的方式解决这个问题
    val value = if(m1.contains("kk")) m1("kk") else ""
    println("==>"+value)

    //2、通过getOrElse的方式解决
    println("==>"+m1.getOrElse("kk",""))


    //更新不可变Map的值,通过重新构造一个Map的方式
    val mx1 = m1 + ("k10"->"v10")
    println((m1 == mx1)+"      newMap="+mx1)

    val mx2 = m1 - "k1"
    println((m1 == mx2) +"     newMap="+mx2)
  }


  /**
    * 可变Map
    */
  def f2(): Unit ={
    val m1 = scala.collection.mutable.Map("k1"->"v1","k2"->"v2")
    val m2 = scala.collection.mutable.Map(("k3","v3"),"k4"->"v4")

    m1("k8")="newkey"
    m2("007") = "吊"

    println("m1="+m1)
    println("m2="+m2)

    m1 += ("k8"->"v8")
    m1 += ("k9"->"v9","k10"->"v10","k11"->"v11")
    println("new m1="+m1)

    m1 -= "k1"
    println("new m1="+m1)
  }

  /**
    * map的遍历
    */
  def f3(): Unit ={
    val m1 = scala.collection.mutable.Map("k1"->"v1","k2"->"v2","k3"->"v3","k4"->"v4")
    for((k,v) <- m1)
      print("k="+k+"    v="+v+",        ")

    println()
    for(k <- m1.keys)
      print("k="+k+",      ")

    println()

    for(v <- m1.values)
      print("v="+v+",    ")
    println()

    val m1Revers = for((k,v) <- m1) yield (v,k)
    println(m1Revers)
  }

  /**
    * 有序Map
    */
  def f4(): Unit ={
      val m1 = scala.collection.immutable.SortedMap("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
      for((k,v) <- m1)
        print(k+",  ")

      println()
      val mx1 = scala.collection.mutable.TreeSet("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
      for((k,v) <- mx1)
        print(k+",  ")

      println()
      val mx2 = scala.collection.mutable.LinkedHashMap("k8"->"v8","k7"->"v7","k6"->"v6","k5"->"v5")
      for((k,v) <- mx2)
        print(k+",  ")

  }

  /**
    * 数组的zip方法会返回一个Tuple的集合
    *
    */
  def f5(): Unit ={
    val names = Array("杰森斯坦森","郭达","绿巨人")
    val age = Array(29,39,190)

    val nameAge = names.zip(age)
    println(nameAge.getClass.getName+"     "+nameAge)
    for((k,v) <- nameAge)
      print(k+","+v+"  ;  ")
  }
}

object T2{

  def main(args: Array[String]): Unit = {
    val t = new T2
    t.f5()
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值