這次統一看一下scala中容器類的幾個方法。 Set filter()方法 filter()方法用來從Set中過濾獲取含有指定特征的元素。示例代碼如下: val colors1 = Set("Blue", "Green", "Red", "yellow") val filteredSet = col... ...
這次統一看一下scala中容器類的幾個方法。
Set
filter()方法
filter()方法用來從Set中過濾獲取含有指定特征的元素。示例代碼如下:
val colors1 = Set("Blue", "Green", "Red", "yellow") val filteredSet = colors1 filter (_ contains "l") println(filteredSet mkString ",")
上面的代碼從一個Set中過濾出了含有字元“l”的元素,而後調用mkString方法將過濾結果拼接列印出來。看一下結果:
++()方法
++()方法用來拼接兩個Set。示例代碼如下:
val colors1 = Set("Blue", "Green", "Red", "yellow") val colors2 = Set("White", "Black") val combinedSet = colors1 ++ colors2 println(combinedSet mkString ",")
很簡單的程式,看一下結果:
**()方法
**()方法用來找出兩個Set的並集(教材上說的是交集,有誤)。示例代碼如下:
val colors1 = Set("Blue", "Green", "Red", "yellow") val colors2 = Set("White", "Black", "Red") val uniondSet = colors1 ++ colors2 println(unionSet mkString ",")
執行結果:
map()方法
map()方法可以對Set的每個元素執行操作,最後返回的是一個新的集合。示例代碼如下:
val colors1 = Set("Blue", "Green", "Red", "yellow") val colorSet = colors1 map ("color is : " + _) colorSet foreach { println(_) }
這裡列印Set元素時使用了內置的迭代器foreach。執行結果:
Map
filterKeys()方法
filterKeys()方法用來對Map的key進行過濾,示例代碼如下:
val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher") val filteredMap = roster filterKeys (_ contains ("Jac")) println("Filtered Size : " + filteredMap.size)
執行結果如下:
filter()方法
也可以使用filter()方法來執行過濾,不過filter()方法中的函數值操作的對象是Key-Value對。看一下代碼:
val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher") val filteredMap = roster filter { ele => val (k, v) = ele k contains ("Jac") } println("Filtered Size : " + filteredMap.size)
get()方法
get()方法用來從Map中取值,不過返回值的類型是Optional[T],示例代碼如下:
val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
println("Jack" + " is a " + (roster get "Jack").get )
說實話,我不太喜歡Optional,還好scala不需要讓我忍受這個東西,它還提供了另一種更簡潔的獲取kv對的方式:
val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
println("Jack" + " is a " + roster("Jack") )
在上面的代碼里我們直接在Map對象後面使用了一個括弧來取值。前面曾提到過,這是使用了Map的一個工廠方法apply。
update()方法
update()方法可以用來“更新”Map對象。因為我們用的Map是一個不變的類的對象,它的“更新”並不會影響之前的對象,它會返回一個新的對象。
val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher") val updatedRoster = roster.updated("Jane", "Nurse") println("Jane" + " is a " + roster("Jane") ) println("Jane" + " is a " + updatedRoster("Jane") )
執行結果如下:
List
在scala中Set和Map都有可變和不變兩種實現,但是List只有不變的實現。scala中的List實現有些類似於java的LinkedList。scala的List的大部分操作都是圍繞head和tail執行的。
如下是一個List使用的示例,我們要訪問List示例的第一個元素可以使用list.head()方法也可以直接執行list(0):
val list1 = List("Red", "Yellow", "Blue")
println(list1.head)
println(list1(0))
執行結果是:
::()方法
這個方法用於在List前添加元素。a :: list可以讀作“在List前添加a”。示例代碼如下:
val list1 = List("Red", "Yellow", "Blue") val list2 = "Black"::list1 println(list1.mkString(",")) println(list2.mkString(","))
執行結果如下:
:::()方法
這個方法用於將一個List實例添加到另一個List實例前面。list ::: listA可以讀作“在listA前添加list”。示例代碼如下:
val list1 = List("Red", "Yellow", "Blue") val list2 = "Black"::list1 val combinedList = list2:::list1 println(list1.mkString(",")) println(list2.mkString(",")) println(combinedList.mkString(","))
執行結果如下:
請註意:以上兩個List的方法操作對象都是操作符後的List實例。
forall()和exists()
用forall()方法可以檢查是否所有元素都滿足某一特定條件。而想瞭解是否存在某些元素滿足特定條件,可以用exists()。示例代碼如下:
val list1 = List("Red", "Yellow", "Blue") println(list1 forall (_ contains ("R"))) println(list1 exists (_ contains ("R")))
執行結果如下:
此外還有map()方法、foldLeft()、foldRight()方法等,前面也都提到過。今天我不想再繼續了。
就這樣!
########