与scala flatMap,Map和Flatten混淆

时间:2017-09-03 12:12:59

标签: scala

请按照以下代码。

import scala.collection.immutable.HashMap

def myFunc(map : HashMap[Char,List[MyObject]], text : List[Char]) : List[MyObject] = {

  text.flatMap(ch => map.get(ch))          //Gives compilation error 
  text.map(ch => map.get(ch)).flatten      //gives compilation error
  text.flatMap(ch => map.get(ch)).flatten  //This works
}

我不明白为什么前两种方法不起作用?

修改
我得到前两行的错误

Expression List[List[MyObject]] doesn't confirm  to expected type list List[MyObject]

1 个答案:

答案 0 :(得分:3)

我认为这里的混淆是HashMap.get()功能。 get函数返回Option[List[MyObject]]。这就是为什么当你展平它时(如第3个例子),它会删除选项。

Read more on Scala Options here.