在Scala中,如何检查泛型HashMap是否包含特定键?

时间:2011-09-21 02:03:22

标签: scala

我正在尝试执行以下操作

  def defined(hash: HashMap[T, U], key: [T) {
    hash.contains(key)
  }

上面的代码不能编译,因为我的语法不正确。是否可以检查未知类型的HashMap是否包含给定密钥?

3 个答案:

答案 0 :(得分:9)

除了流浪“[”我不认为你有语法错误。那你在括号之前需要一个“=”,否则函数将不会返回bool。因为只有一个表达式,所以不需要括号......

import scala.collection.mutable._

object Main extends App {

  def defined[T,U](hash: HashMap[T, U], key: T) = hash.contains(key)

  val m = new HashMap[String,Int]
  m.put("one", 1)
  m.put("two", 2)
  println(defined(m, "one"))
  println(m contains "two")
  println(defined(m, "three"))
}

答案 1 :(得分:4)

没有必要定义自己的;因为所有Map,特别是所有HashMap都是PartialFunction,您可以使用isDefinedAt方法:

scala> val map = HashMap(1->(), 2->())
map: scala.collection.mutable.HashMap[Int,Unit] = Map(1 -> (), 2 -> ())

scala> map.isDefinedAt(2)
res9: Boolean = true

scala> map.isDefinedAt(3)
res10: Boolean = false

此外,还有contains方法特别适用于MapLike个对象,但做同样的事情。

答案 2 :(得分:1)

可能你的解决方案是这样的:

def detect[K,V]( map : Map[K,V], value : K  ) : Boolean = { 
  map.keySet.contains( value )
}

在方法名称后面声明泛型参数,然后将它们用作参数的类型。