filterNot
нуждается в ключевом слове case
и {}
при извлечении k, v
из кортежа.
отмечают, что его не exist
его exists
m.filterNot { case (k,v) => someList.exists(l => k.startsWith(l)) }
или
m.filterNot(pair => someList.exists(l => pair._1.startsWith(l)))
Объяснение
Как вы извлекаете K, V из кортежа, используя синтаксис экстрактор у вас есть использовать ключевое слово case
и {}
Без синтаксиса экстрактор вы можете сделать
m.filterNot(pair => someList.exists(l => pair._1.startsWith(l)))
Scala REPL
scala> val m = Map("a1" -> "1", "b2" -> "2", "c3" -> "3")
m: scala.collection.immutable.Map[String,String] = Map(a1 -> 1, b2 -> 2, c3 -> 3)
scala> val someList = List("b", "d")
someList: List[String] = List(b, d)
scala> m.filterNot { case (k,v) => someList.exists(l => k.startsWith(l)) }
res15: scala.collection.immutable.Map[String,String] = Map(a1 -> 1, c3 -> 3)
Без синтаксиса экстрактор
Теперь вам не нужно использовать case
ключевое слово и {}
как ш е не используют извлечения ключа и значения с помощью экстрактора синтаксиса
scala> m.filterNot(pair => someList.exists(l => pair._1.startsWith(l)))
res18: scala.collection.immutable.Map[String,String] = Map(a1 -> 1, c3 -> 3)
scala> val m = Map("a1" -> "1", "b2" -> "2", "c3" -> "3")
m: scala.collection.immutable.Map[String,String] = Map(a1 -> 1, b2 -> 2, c3 -> 3)
scala> val someList = List("b", "d")
someList: List[String] = List(b, d)
scala> m.filterNot(pair => someList.exists(l => pair._1.startsWith(l)))
res19: scala.collection.immutable.Map[String,String] = Map(a1 -> 1, c3 -> 3)
Или просто: '(пара => someList.exists (pair._1.startsWith))' – jwvh
@jwvh я уже упомянул об этом в ответе – pamu
Хмм, я этого не вижу. Все ваши примеры явно передают параметр 'l':' startsWith (l) 'На самом деле его можно уменьшить еще больше,' m.filterNot (someList существует _._ 1.startsWith) ', но теперь нам грозит затенение код, будучи слишком симпатичным с синтаксисом. – jwvh