This is something I encounter frequently, but I don't know the elegant way of doing. I have a collection of Foo objects. Foo has a method bar() that may return null or a Bar object. I want to scan the collection, calling each object's bar() method and stop on the first one returning an actual reference and return that reference from the scan.
Obviously:
foos.find(_.bar != null).bar
does the trick, but calls #bar twice.
Working on the Stream[T] returned by Seq.projection is a nice trick
foos.projection map (_.bar) find (_.size > 0)
This will map the values needed to execute find.
In Scala 2.8 it's:
foos.view map (_.bar) find (_.size > 0)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With