filter方法会将序列中各个元素依次替换到下划线"_"所处位置,若是返回true,则保留该元素。java
(1 to 9).filter( _ % 2 == 0 )
输出:2, 4, 6, 8 api
reduceLeft是一个通用的汇集计算方法,你能够把"+"换成其它的运算。其实对于求和有更简单的方法,请参考第6条。spa
(1 to 9).reduceLeft(_ + _)
输出:45.net
groupBy方法能够将序列转换成Map,适合用在须要按某个属性进行统计的状况。scala
List("no", "zuo", "no", "die").groupBy(w => w).mapValues(_.length)
输出:Map(no -> 2, zuo -> 1, die -> 1)code
map能够把序列转换成另外一个序列,在map方法中定义各个元素的转换过程。排序
List("one", "line", "of", "code").map(_.capitalize)
输出:List(One, Line, Of, Code)ip
mkString方法用于将序列拼接成字符串,第1个参数是起始符号,第2个参数是分隔符,第3个参数是结束符号。字符串
(1 to 9).mkString("(", ",", ")")
输出:(1,2,3,4,5,6,7,8,9)get
这在Scala中垂手可得,直接调用min,max和sum方法。
List(14, 35, -7, 46, 98).min List(14, 35, -7, 46, 98).max List(14, 35, -7, 46, 98).sum
输出:-7 98 186
zipWithIndex方法将序列List[Int]转换成List[(Int, Int)],即List[Tuple2[Int, Int]]。Tuple2的第1个Int是元素,第2个Int是元素所处的位置。
List(2, 0, 1, 4, 12, 5).zipWithIndex.sorted.reverse.take(3)
输出:List((12,4), (5,5), (4,3))
在Scala中读取文本文件至关轻松。
val fileContent = io.Source.fromFile("myfile.txt").mkString val fileLines = io.Source.fromFile("myfile.txt").getLines.toList
下载文件就是这么容易。其实利用sys.process包,咱们能够用Scala编写Shell脚本,是否是很酷!
import sys.process._ import java.net.URL import java.io.File new URL("http://www.oschina.net/favicon.ico") #> new File("d:/favicon.ico") !!
par方法将原序列转换成并行序列,能够利用多核的优点加快处理速度,真是想得太周到了!
(1 to 99).par.sum
输出:4950
相似加权求和。
dataList.zip(weightList).map{t => t._1 * t._2}.sum
先按学生的年龄排序,若是年龄相同,则按分数排序:
case class Student(name: String, age: Int, score: Int) List( Student("a", 14, 60), Student("b", 15, 80), Student("a", 15, 70) ).sortBy(s => (s.age, s.score))
输出:List(Student(a,14,60), Student(a,15,70), Student(b,15,80))
每相邻的10个元素分红一组:
val list = (0 to 20).map(_.toString) list.zipWithIndex.map(t => t._1 -> ((t._2 / 10) * 10)).groupBy(_._2).toList.sortBy(_._1).map(_._2.map(_._1))
输出:
Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) Vector(10, 11, 12, 13, 14, 15, 16, 17, 18, 19) Vector(20)
List(1, 2, 3).headOption.getOrElse(0)