1

鉴于以下情况:

mergeMap:HashMap[String,HashSet[String]]

为什么 val x 不检查 HashMap[String,Integer] ?

val x = HashMap[String,Integer]().withDefault(_ => 1).++( mergeMap.map { case(id,codes) => codes } )

相反,它将类型检查为: scala.collection.mutable.Iterable[Serializable with ScalaObject with Equals]

我怎样才能让它这样做?

谢谢!

4

1 回答 1

1

我不知道你到底想做什么,但它是这样的吗?

    scala> val mergeMap = Map(("key1", "value1"), ("key2", "value2"), ("key3", "value1"))
    mergeMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(key1 -> value1, key2 -> value2, key3 -> value1)

    scala> mergeMap.values.toSet.map((_ : String, 1)).toMap
    res12: scala.collection.immutable.Map[String,Int] = Map(value1 -> 1, value2 -> 1)

第一个创建从字符串到字符串的映射(而不是像您的示例中那样从字符串到字符串集合)。

第二个从映射中获取所有值,并构建一个新映射,其中第一个映射中的值作为键,默认值 1 作为每个值。重复的键被丢弃(在“toSet”步骤中,并将在“toMap”步骤中再次丢弃)。

于 2013-06-19T13:04:12.167 回答