<点点滴滴>有关Scala的Option类的使用

//快学scala的第四章课后习题第一题
  val prices=Map("xiaomi"->5,"meizu"->10,"huawei"->20)
  //
短短一行代码就可以把价格打九折返回给一个新的map
  val  disprice=for((k,v)<-prices) yield (k,v*0.9)
  for((k,v)<-disprice)
  {
    println(k+" : "+v)
  }

 
//快学scala的第四章课后习题第二题
val in=new java.util.Scanner(new File("C:\\Users\\user\\Desktop\\快学Scala 课后习题答案集合\\a.txt"));
val wordcount: Map[String, Int] =new mutable.HashMap[String,Int](); 
  while(in.hasNext){  
var  temp=in.next() 
 //scala 方便的方法让wordcount短短几行代码。
  // getOrElse(key,default)获取key对应的value,如果不存在则返回一个默认值。(这个问题也可以使用Option类解决,见下文)  
   wordcount.put(temp,wordcount.getOrElse(temp,0)+1)
}
 //判断wordcount里面是否有key为“aaa”的元素,没有的话则添加(“aaa”,20)到wordcount中
  wordcount.getOrElseUpdate("aaa",20)
  
//遍历输出map
   for((k,v)<-wordcount)
    {
    println(k+" : "+v)
     }
// map.get返回值是Option[T],这一切都需要从Option说起:
//标准库中的Option类型用样例来表示:“那种可能存在,也可能不存在的值”。样例子类Some包装了某个值,例如:Some("Tom")
//,而样例None表示没有值
//例如:map.get返回值是Option[T]
// 如果map中有key为iPhone记录的话则wordcount.get("iPhone")有值,否则wordcount.get("iPhone")为None
//为了避免使用None所以引进这个Option类
1:使用match模式匹配:
wordcount.get("iPhone") match {
     case Some(v)=> println(v)
     case None =>println("No Value")
}
   
2:使用isEmpty和get解决 
//  get可以获取处Option中的值。
  val num=wordcount.get("hadoop")
  if (num.isEmpty) println("No Value") else println(num.get)
 
如果是map可以使用getOrElse方法 而不必使用上面1,2方法。
 
 
同时可以把Option当做是一个要么为空,要么有带有单个元素的集合,并使用诸如
map,foreach或filter等方法。例如:
wordcount.get("hadoop").foreach(println _)
如果有hadoop则get词频次数并打印,否则get返回None,什么也不做。
 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值