Scala: лучший способ удалить кортежи из Seq, где одним значением является None - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу отфильтровать None значения, где они появляются в последовательности кортежей. В приведенном ниже коде я хочу заменить getOrElse на get. Но тогда как мне удалить кортежи, где первое значение равно None?

Вот мой код. Я чувствую, что это не элегантно.

myFirstMap.map {
  case (key, value) =>
    val tuple = (myLookUpMap.getOrElse(key,MyCaseClass("", None)), value.toString)
    tuple
}.filter(_._1.name.nonEmpty).toIndexedSeq

}

Как правильно это сделать?

ПРИМЕЧАНИЕ: этот метод будет вызываться тысячи раз на Seq сдлина от 40 до 100, поэтому важна производительность

Ответы [ 5 ]

3 голосов
/ 06 ноября 2019

Похоже, .map() и .flatMap() должны сделать свое дело, вот что такое понимание for.

(for {
  (k, v) <- myFirstMap
  mcc    <- myLookUpMap.get(k)
} yield (mcc, v.toString)).toIndexedSeq
1 голос
/ 07 ноября 2019

Или как насчет этого подхода:

val commonKeys = myFirstMap.keySet().intersect( myLookUpMap.keySet() )
val tupleSeq = commonKeys.map { case ( key, value ) =>
  ( myLookUpMap(key), value.toString )
}.toIndexedSeq
1 голос
/ 06 ноября 2019

myFirstMap.collect { case (k, _) if myFilterMap.contains(k) => myFilterMap(k)}

0 голосов
/ 06 ноября 2019

Вы можете использовать flatMap для фильтрации None в коллекции

myFirstMap.flatMap { case (key, value) => myLookUpMap.get(key).map(entity => (entity, value.toString)) }

0 голосов
/ 06 ноября 2019

Может быть

myFirstMap.map {
  case (key, value) =>
    myLookUpMap.get(key).map( found => Tuple2( found, value.toString ) )
}.withFilter(_.nonEmpty).map( _.get ).toIndexedSeq

... или более наглядно ...

val mbTuples = myFirstMap.map {
  case (key, value) =>
    myLookUpMap.get(key).map( found => Tuple2( found, value.toString ) )
}
val foundTuples = mbTuples.withFilter(_.nonEmpty).map( _.get )
val tupleSeq = foundTuples.toIndexedSeq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...