Home > Enterprise >  Filter Seq[Map[k,v]] given a Seq[String]
Filter Seq[Map[k,v]] given a Seq[String]

Time:10-05

I have this Seq[Map[String, String]] :

     val val1 = Seq(
          Map("Name" -> "Heidi", 
             "City" -> "Paris", 
             "Age" -> "23"), 
          Map(("Country" -> "France")), 
          Map("Color" -> "Blue", 
             "City" -> "Paris"))

and I have this Seq[String]

  val val2 = Seq["Name", "Country", "City", "Department"] 

Expected output is val1 with all keys present in val2 (I want to filter out the (k,v) from v1 that have keys that are not present in val2) :

val expected = Seq(Map("Name" -> "Heidi", "City" -> "Paris"), Map( "Country" -> "France")), Map("City" -> "Paris"))

Age and Color are strings that are not in val2, I want to omit them from val1 map.

CodePudding user response:

I'm not sure if what you propose is a right approach but nevertheless, it can be done like this:

val1.map(_.filter {
    case (key, value) => val2.contains(key)
})

CodePudding user response:

It seems you want something like this:
(note that I used a Set instead of a List to make contains faster)

def ensureMapsHaveOnlyValidKeys[K, V](validKeys: Set[K])(data: IterableOnce[Map[K, V]]): List[Map[K, V]] =
  data
    .iterator
    .filter(_.keysIterator.forall(validKeys.contains))
    .toList
  • Related