Skip to content

Instantly share code, notes, and snippets.

@scottashipp
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottashipp/9e3bf88ea1095b317629 to your computer and use it in GitHub Desktop.
Save scottashipp/9e3bf88ea1095b317629 to your computer and use it in GitHub Desktop.
Using Scala extractor with List filter and find
class Member(val id: String, val programId: Long)
class Program3Member(val memberId: String, val program: String)
object Program3Member {
def unapply(c: Member): Option[Member] = { if(c.programId == 3L) Some(c) else None }
}
val pete = new Member("12345", 9L)
val steve = new Member("67891", 3L)
val janet = new Member("23458", 3L)
val dave = new Member("78934", 6L)
val someMembers = List(pete, steve, janet, dave)
//it is a bit klunky
val membersInProgram3 = someMembers filter { _ match { case Program3Member(n) => true case _ => false } }
val firstMemberInProgram3 = someMembers find { _ match { case Program3Member(n) => true case _ => false } }
//extractors have much better support in a for-comprehension
for(Program3Member(n) <- someMembers) { println(n.id) }
//especially notable - we can replace the membersInProgram3 declaration with this
val membersInProgram3 = for(Program3Member(n) <- someMembers) yield n
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment