Scala List

原创转载请注明出处:http://agilestyle.iteye.com/blog/2331949

 

ScalaList.scala

package org.fool.scala.basic

object ScalaList {
  def main(args: Array[String]): Unit = {
    val list1 = List(1, 2, 3)
    println(list1)

    val list2 = List("Hello", "World")
    println(list2)

    // List has a method named `:::' for list concatenation
    val list = list1 ::: list2
    println(list)

    // Perhaps the most common operator you'll use with lists is `::', which is pronounced "cons."
    // Cons prepends a new element to the beginning of an existing list and returns the resulting list.
    val twoThree = List(2, 3)
    val oneTwoThree = 1 :: twoThree
    println(oneTwoThree)

    val oneTwoThreeFour = 1 :: 2 :: 3 :: 4 :: Nil
    println(oneTwoThreeFour)

    val thrill = "I" :: "Love" :: "Scala" :: Nil
    // List(I, Love, Scala)
    println(thrill)
    // Scala
    println(thrill(2))
    // 1
    println(thrill.count(s => s.length == 4))
    // List(Scala)
    println(thrill.drop(2))
    // List(I)
    println(thrill.dropRight(2))
    // true
    println(thrill.exists(s => s == "Scala"))
    // false
    println(thrill.exists(s => s == "Spark"))
    // List(Love)
    println(thrill.filter(s => s.length == 4))
    // List(I, Scala)
    println(thrill.filterNot(s => s.length == 4))
    // false
    println(thrill.forall(s => s.endsWith("a")))

    println(thrill.foreach(s => print(s)))
    println(thrill.foreach(print))

    // I
    println(thrill.head)
    // Scala
    println(thrill.last)
    // List(I, Love)
    println(thrill.init)
    // List(Love, Scala)
    println(thrill.tail)
    // false
    println(thrill.isEmpty)
    // 3
    println(thrill.length)
    // List(Iy, Lovey, Scalay)
    println(thrill.map(s => s + 'y'))
    // I,Love,Scala
    println(thrill.mkString(","))
    // List(Scala, Love, I)
    println(thrill.reverse)
    // List(Scala, Love, I)
    println(thrill.sortWith((s, t) => s.charAt(0).toLower > t.charAt(0).toLower))
  }
}

Console Output

List(1, 2, 3)
List(Hello, World)
List(1, 2, 3, Hello, World)
List(1, 2, 3)
List(1, 2, 3, 4)
List(I, Love, Scala)
Scala
1
List(Scala)
List(I)
true
false
List(Love)
List(I, Scala)
false
ILoveScala()
ILoveScala()
I
Scala
List(I, Love)
List(Love, Scala)
false
3
List(Iy, Lovey, Scalay)
I,Love,Scala
List(Scala, Love, I)
List(Scala, Love, I)

  

 

 

### 关于 `mapValues` 的用法 在 Scala 中,`mapValues` 是一种专门用于操作 `Map` 类型的方法。它允许开发者通过提供一个函数来转换 `Map` 中所有的 **value 值**,而不改变其对应的键(key)。需要注意的是,`mapValues` 方法仅适用于 `Map` 而不是 `List`。 以下是关于如何在 Scala 中使用 `mapValues` 的详细说明: #### 使用场景 假设有一个 `Map` 数据结构如下所示: ```scala val map = Map("a" -> 1, "b" -> 2, "c" -> 3) ``` 如果希望将每个值乘以 2,则可以使用 `mapValues` 来实现这一需求[^1]。 #### 实现方式 下面是一个具体的例子展示如何应用 `mapValues`: ```scala val transformedMap = map.mapValues(value => value * 2) // 结果为:transformedMap: Map(String, Int) = Map("a" -> 2, "b" -> 4, "c" -> 6) ``` 上述代码片段中,`mapValues` 接收了一个匿名函数 `(value => value * 2)`,该函数被应用于原始 `Map` 中的每一个值,从而生成一个新的映射关系。 #### 注意事项 尽管 `mapValues` 提供了一种简洁的方式来处理 `Map` 的值部分,但它返回的结果实际上是一个视图(view),这意味着只有当访问某个特定条目时才会执行相应的计算逻辑[^2]。 如果需要立即获得完整的更新后的 `Map` 对象,可以通过调用 `.toMap` 将其显式转换成不可变的 `Map` 形式。 对于列表 (`List`) 类型的数据集合来说,并不存在直接等价于 `mapValues` 的方法;但是可以用普通的 `map` 函数配合模式匹配或者提取器来达到相似的效果[^3]。 例如给定一个包含元组的列表: ```scala val listOfTuples = List(("apple", 5), ("banana", 7)) ``` 要将其第二个元素加倍,可以这样做: ```scala val newList = listOfTuples.map { case (k, v) => (k, v * 2) } // 新列表变为:List(("apple", 10), ("banana", 14)) ``` 这种做法虽然不如针对 Maps 执行 mapValues 那样直观明了,但在 Lists 上实现了类似的变换功能。 ### 总结 - `mapValues` 主要是用来修改 `Map` 内部存储的 values。 - 它不会影响 keys 并且会延迟求值直到实际查询发生为止。 - 若要对其他数据结构比如 lists 进行类似的操作则需采用通用形式如标准库里的 `map`.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值