Scala针对容器的操作(遍历、映射、过滤、归约)案例

本文介绍了Scala中容器的基本操作,包括遍历、映射、过滤和归约等核心方法,并通过具体示例展示了如何使用这些方法处理List和Map类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、遍历操作

Scala容器的标准遍历方法foreach

def foreach[U](f:Elem => U) :Unit
object foreach_test {
  def main(args: Array[String]): Unit = {
    val list = List(1,2,3)
    val f=(i:Int)=>println(i)
    list.foreach(f)
    val university = Map("XMU" -> "Xiamen University", "THU" -> "Tsinghua University", "PKU"
      -> "Peking University")
    university foreach (kv => println(kv._1 + ":" + kv._2))
    university foreach { x => x match {case (k, v) => println(k + ":" + v) } }
    //case (k,v)使用元组对象
    university foreach { case (k, v) => println(k + ":" + v) }
  }
}

out:

1
2
3
XMU:Xiamen University
THU:Tsinghua University
PKU:Peking University

二、映射操作

2.1.map方法

map用于对容器或者集合做一对一映射。

实例:

object map_test {
  def main(args: Array[String]): Unit = {
    val books=List("Hadoop","Hive","HDFS")
    println(books.map(s=>s.toUpperCase()))
    //toUpperCase方法将一个字符串中的每个字母都变成大写字母
    println(books.map(s=>s.length))//将字符串映射到它的长度
  }
}

out:

List(HADOOP, HIVE, HDFS)
List(6, 4, 4)
2.2.flatmap方法

把里面每一个元素拿过来作为映射,而且映射得到的结果是一对多的映射。

object map_test {
  def main(args: Array[String]): Unit = {
    val books=List("Hadoop","Hive","HDFS")
    println(books flatMap(s=>s.toList))//中缀表示法
  }
}

out:

List(H, a, d, o, o, p, H, i, v, e, H, D, F, S)

三、过滤操作

filter字符过滤

object filter_test {
  def main(args: Array[String]): Unit = {
    val university = Map(
      "XMU" -> "Xiamen University",
      "THU" -> "Tsinghua University",
      "PKU" -> "Peking University",
      "XMUT" -> "Xiamen University of Technology"
    )
    val xmus = university filter { kv => kv._2 contains "Xiamen" }
    println(xmus)
  }
}

out:

Map(XMU -> Xiamen University, XMUT -> Xiamen University of Technology)

整型过滤

val l = List(1, 2, 3, 4, 5, 6) filter {_ % 2 == 0}
println(l)

out:

List(2, 4, 6)

四、归约操作

reduce(f)

object reduce_test {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5)
    val list_add = list.reduce(_ + _) //将列表元素累加,使用了占位符语法
    println(list_add)
    val list_mul = list.reduce(_ * _) //将列表元素连乘
    println(list_mul)
    val process = list map (_.toString) reduce ((x, y) => s"f($x,$y)")
    println(process)
  }
}

out:

15
120
f(f(f(f(1,2),3),4),5)
//f表示传入reduce的二元函数

归约操作有左右之分

  • reduceLeft
  • reduceRight
object reduce_test {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5)
    val left1=list reduceLeft{_-_}
    println(left1)
    val right1=list reduceRight{_-_}
    println(right1)
  }
}

out:

-13
3

fold

scala> val list = List(1, 2, 3, 4, 5)
list: List[Int] = List(1, 2, 3, 4, 5)

scala> list.fold(10)(_*_)
res0: Int = 1200

scala> (list fold 10)(_*_)//fold的中缀调用写法
res1: Int = 1200

scala> (list foldLeft 10)(_-_)//计算顺序(((((10-1)-2)-3)-4)-5)
res2: Int = -5
Scala中的列表是一种不可变的链表数据结构,它是Scala标准库中的一个重要的集合类型。列表具有高效的递归操作,非常适合于模式匹配,因此经常被用于函数式编程中。 列表的应用示例可以包括但不限于以下场景: 1. 排序:可以使用列表来存储待排序的数据,然后通过各种排序算法对其进行排序。由于列表是不可变的,排序操作通常会生成一个新的列表。 2. 函数式操作:列表支持各种函数式编程操作,如映射(map)过滤(filter)、折叠(fold)归约(reduce)等。这些操作可以用来处理列表中的元素,并生成新的列表或累积的结果。 3. 递归处理:由于列表是链表结构,它自然适合使用递归函数进行遍历和处理。递归处理可以用于很多算法,比如深度优先搜索(DFS)。 4. 作为函数参数:在Scala中,列表常作为函数的参数,尤其是当你需要将多个值作为一组参数传递给函数。列表提供了一个简洁的方式来处理参数序列。 例如,假设我们有一个任务,需要对一组数字进行过滤,只保留偶数,并计算它们的平方和。在Scala中,我们可以使用列表来轻松实现这个任务: ```scala val numbers = List(1, 2, 3, 4, 5) // 创建一个包含数字的列表 val evenSquaresSum = numbers // 使用列表操作来完成任务 .filter(_ % 2 == 0) // 过滤出偶数 .map(x => x * x) // 计算每个偶数的平方 .reduce((a, b) => a + b) // 归约所有平方数的和 println(evenSquaresSum) // 输出最终的和,结果应该是 20 ``` 通过上述代码,我们演示了如何利用列表进行数据处理,包括过滤映射归约操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值