Last active
August 29, 2015 14:13
-
-
Save scottashipp/9e3bf88ea1095b317629 to your computer and use it in GitHub Desktop.
Using Scala extractor with List filter and find
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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