酷炫的一行代碼 - Scala就是這麼任性!

1. 過濾出序列中全部偶數

filter方法會將序列中各個元素依次替換到下劃線"_"所處位置,若是返回true,則保留該元素。java

(1 to 9).filter( _ % 2 == 0 )

輸出:2, 4, 6, 8 api

2. 對序列中全部元素求和

reduceLeft是一個通用的彙集計算方法,你能夠把"+"換成其它的運算。其實對於求和有更簡單的方法,請參考第6條。spa

(1 to 9).reduceLeft(_ + _)

輸出:45.net

3. 統計單詞出現次數

groupBy方法能夠將序列轉換成Map,適合用在須要按某個屬性進行統計的狀況。scala

List("no", "zuo", "no", "die").groupBy(w => w).mapValues(_.length)

輸出:Map(no -> 2, zuo -> 1, die -> 1)code

4. 將序列中單詞首字母大寫

map能夠把序列轉換成另外一個序列,在map方法中定義各個元素的轉換過程。排序

List("one", "line", "of", "code").map(_.capitalize)

輸出:List(One, Line, Of, Code)ip

5. 將序列拼接成字符串 

mkString方法用於將序列拼接成字符串,第1個參數是起始符號,第2個參數是分隔符,第3個參數是結束符號。字符串

(1 to 9).mkString("(", ",", ")")

輸出:(1,2,3,4,5,6,7,8,9)get

6. 最大值,最小值和求和 

這在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

7. 獲取序列中最大的前3個數值和位置

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))

8. 讀取文本文件 

在Scala中讀取文本文件至關輕鬆。

val fileContent = io.Source.fromFile("myfile.txt").mkString
val fileLines = io.Source.fromFile("myfile.txt").getLines.toList

9. 下載URL連接

下載文件就是這麼容易。其實利用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") !!

10. 並行計算

par方法將原序列轉換成並行序列,能夠利用多核的優點加快處理速度,真是想得太周到了!

(1 to 99).par.sum

輸出:4950 

11. 兩個List相乘求和

    相似加權求和。

dataList.zip(weightList).map{t => t._1 * t._2}.sum

12. 按多個字段排序List

先按學生的年齡排序,若是年齡相同,則按分數排序:

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))

13. 將List相鄰元素分組

每相鄰的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)

14. 取序列的第1個元素

List(1, 2, 3).headOption.getOrElse(0)
相關文章
相關標籤/搜索