Scala
Scala Snippet: How to filter a list in Scala
In Scala, filtering and processing collections is easy and elegant. There are many filtermethods available, but the most used will probably the basic filter method.
Here’s a code example of some filtering on my (ex)camera collection.
The filter method will not only work on Lists, but on any Scala collection.
object MyCameraCollection02 { class Camera(_brand: String, _model: String, _sensorType: String, _yearBought: Int) { val brand: String = _brand val model: String = _model val yearBought = _yearBought val sensorType = _sensorType override def toString(): String = { return "%s %s \t\t %s \t(%d)" format(brand, model, sensorType, yearBought) } } def main(args: Array[String]) { val canon5dmarkIII = new Camera("Canon", "5D MkIII", "FF", 2013) val canon5dmarkII = new Camera("Canon", "5D MkII", "FF", 2009) val canon6d = new Camera("Canon", "6D", "FF", 2014) val canon550d = new Camera("Canon", "550D", "APS-C", 2010) val canon40d = new Camera("Canon", "40D", "APS-C", 2008) val canonIXUS330 = new Camera("Canon", "IXUS 330", "1/2.7", 2001) val canonIXUSZ90 = new Camera("Canon", "IXUS Z90", "APS-C", 1999) val panasonicGM1 = new Camera("Panasonic", "GM1", "M43", 2014) val panasonicFZ20 = new Camera("Panasonic", "FZ20", "1/2.5", 2005) val sonyrx100 = new Camera("Sony", "DSC-RX100", "1\"", 2013) val sonynex5 = new Camera("Sony", "NEX-5", "APS-C", 2011) val sonyr1 = new Camera("Sony", "DSC-R1", "APS-C", 2005) val myCameras = List(canon5dmarkIII, canon5dmarkII, canon6d, canon550d, canon40d, canonIXUS330, canonIXUSZ90, panasonicGM1, panasonicFZ20, sonyrx100, sonynex5, sonyr1) val canonCameras = myCameras.filter(x => x.brand == "Canon") // Every Canon camera I ever owned val sonyCameras = myCameras.filter(x => x.brand == "Sony") // Every Sony camera I ever owned val pansonicCameras = myCameras.filter(x => x.brand == "Panasonic") // Every Panasonic camera I ever owned // apscCamera's only val apscCameras = myCameras.filter(cam => cam.sensorType == "APS-C") println("==APS-C camera's owned==") apscCameras foreach (cam => println(cam)) println // Canon camera's which are not full frame. You can filter, filtered lists. val canonNonFF = myCameras.filter(x => x.brand == "Canon").filter(x => x.sensorType != "FF") println("==Non-FF camera's owned==") canonNonFF foreach (cam => println(cam)) println // Filter by boolean expressions on class properties val apsBefore2012 = apscCameras.filter(cam => cam.yearBought < 2012) println("==APS-C camera's bought before 2012 owned==") apsBefore2012.foreach(cam => println(cam)) println // Filter by combining boolean expressions. val ffcamerasBefore2012 = myCameras.filter(cam => cam.yearBought < 2012 && cam.sensorType == "FF") println("==Every FF Camera I ever owned before 2012==") ffcamerasBefore2012.foreach(cam => println(cam)) println } }
Running this example will give you the following result:
==APS-C camera's owned== Canon 550D APS-C (2010) Canon 40D APS-C (2008) Canon IXUS Z90 APS-C (1999) Sony NEX-5 APS-C (2011) Sony DSC-R1 APS-C (2005) ==Non-FF camera's owned== Canon 550D APS-C (2010) Canon 40D APS-C (2008) Canon IXUS 330 1/2.7 (2001) Canon IXUS Z90 APS-C (1999) ==APS-C camera's bought before 2012 owned== Canon 550D APS-C (2010) Canon 40D APS-C (2008) Canon IXUS Z90 APS-C (1999) Sony NEX-5 APS-C (2011) Sony DSC-R1 APS-C (2005) ==Every FF Camera I ever owned before 2012== Canon 5D MkII FF (2009)
Reference: | Scala Snippet: How to filter a list in Scala from our JCG partner Arthur Arts at the JDriven blog. |
why your code is so ugly? :(
http://pastebin.com/Xzcbekz4