scala> val a = Map("hoge" -> 1) a: scala.collection.immutable.Map[String,Int] = Map(hoge -> 1) scala> val d = Set("hoge") d: scala.collection.immutable.Set[String] = Set(hoge) scala> a.filterKeys(!d.contains(_)).size res0: Int = 0 scala> val a = Map() a: scala.collection.immutable.Map[Nothing,Nothing] = Map() scala> a.filterKeys(!d.contains(_)).size res1: Int = 0 scala> val a = Map("" -> "") a: scala.collection.immutable.Map[String,String] = Map("" -> "") scala> a.filterKeys(!d.contains(_)).size res2: Int = 1
Map aに対して、filterKeysでSet dで定義されている名前がMap Aのキーが無いことを確認したい。Setで定義されている名前がMapになかったらsizeの値が大きくなり、Setで定義されている名前がMapにすべてあれば、sizeは0になるはず。
で、やってみると空Mapだとなぜか0なのね。hogeキーがないのに、0。なんだかよくわからないので、空文字列キーの空文字列バリューでごまかすというソリューションを考えてみた。