score:5

Accepted answer

well i guess what you meant

filter keys of map that does not contains any value of the set

m.filterkeys(key => s.exists(key.contains(_)) )

this will do

score:1

set extends function1

collect in action

m.collect { case (k, v) if s(k.split("_")(1)) => k -> v }

filterkeys in action

m.filterkeys(key => s(key.split("_")(1)))

filter in action

m.filter { case (k, _) => s(k.split("_")(1)) }

explanation

set extends function1 and set instance can be directly applied to the a key to check if it exists in the set.

scala> val s = set("blue", "orange")
s: scala.collection.immutable.set[string] = set(blue, orange)

scala> s("blue")
res0: boolean = true

scala> s("apple")
res1: boolean = false

scala> val s = set("blue", "orange")
s: scala.collection.immutable.set[string] = set(blue, orange)

scala> val m = map("product_orange_123" -> 1, "prodoct_blue_123" -> 2, "product_green_123" -> 5, "product_blue_887" -> 7)
m: scala.collection.immutable.map[string,int] = map(product_orange_123 -> 1, prodoct_blue_123 -> 2, product_green_123 -> 5, product_blue_887 -> 7)

scala> m.collect { case (k, v) if s(k.split("_")(1)) => k -> v }
res2: scala.collection.immutable.map[string,int] = map(product_orange_123 -> 1, prodoct_blue_123 -> 2, product_blue_887 -> 7)

scala> m.filterkeys(key => s(key.split("_")(1)))
res3: scala.collection.immutable.map[string,int] = map(product_orange_123 -> 1, prodoct_blue_123 -> 2, product_blue_887 -> 7)

scala> m.filter { case (k, _) => s(k.split("_")(1)) }
res4: scala.collection.immutable.map[string,int] = map(product_orange_123 -> 1, prodoct_blue_123 -> 2, product_blue_887 -> 7)

Related Query

More Query from same tag