0

So right now I have a list of a object with a Optional Field like this in scala

case class Foo(
                   id: String,
                   description: String,
                   OptionalTag: Option[String],
) 

What I want is to iterate through the list of objects and only get the Optional Tags if they exists, my current approach is this

     Tags = listOfFoos.map(foo =>
        if (foo.OptionalTag.isDefined) {
          foo.OptionalTag.get
        } else {
          ""
        }
      ).filter(_ != "" -> "")

However Im sure theres a better way to do this then go over the entire list twice but I can not figure it out.

Dmytro Mitin
  • 48,194
  • 3
  • 28
  • 66
Mylies
  • 396
  • 4
  • 18

1 Answers1

1

For the specific problem you mention, flatMap is the best solution:

listOfFoos.flatMap(_.OptionalTag)

If you want to do more complex processing, collect is the best choice because it can do the job of both filter and map:

listOfFoos.collect{ case (_, _, Some(tag)) => "Tag is " + tag }
Tim
  • 26,753
  • 2
  • 16
  • 29