scala hashmap get string value returns some()

val vJsonLoc = new HashMap[String, String]();    
def getPrevJson(s:String) = vJsonLoc.get(s)
val previousFile = getPrevJson(s"/${site.toLowerCase}/$languagePath/$channel/v$v/$segment")

this returns

Some(/Users/abc/git/abc-c2c/)

on trying to append string previousFile + "/" + index + ".json"

the result is Some(/Users/abc/git/abc-c2c/)/0.json when the desired result is /Users/abc/git/abc-c2c/0.json

Guess this is some concept of Option that have not understood. New to scala.


As you pointed out, you're getting back an Option type, and not a direct reference to the String contained in your data structure. This is a very standard Scala practice, allowing you to better handle cases where an expected value might not be present in your data structure.

For example, in Java, this type of method typically returns the value if it exists and null if it doesn't. This means, however, subsequent code could be operating on the null value and thus you'd need further protection against exceptions.

In Scala, you're getting a reference to an object which may, or may not, have the value you expect. This is the Option type, and can be either Some (in which case the reference is accessible) or None (in which case you have several options for handling it).

Consider your code:

val vJsonLoc = new HashMap[String, String]();    
def getPrevJson(s:String) = vJsonLoc.get(s)
val previousFile = getPrevJson(s"/${site.toLowerCase}/$languagePath/$channel/v$v/$segment")

If the HashMap returned String , your previousFile reference could point to either a null value or to a String value. You'd need to protect against a potential exception (regular practice in Java).

But in Scala, get is returning an Option type, which can be handled in a number of ways:

val previousFile = getPrevJson("your_string").getOrElse("")
//or
val previousFile = getPrevJson("your_string") match {
    case Some(ref) => ref
    case None => ""
}

The resulting reference previousFile will point to a String value: either the expected value ("get") or the empty string ("OrElse").


Scala Map on get returns Option . Use vJsonLoc(s) instead of vJsonLoc.get(s)

链接地址: http://www.djcxy.com/p/86202.html

上一篇: Scala Try的toOption方法返回Some(null)

下一篇: scala hashmap获取字符串值返回some()