Scala:for-yield表达式基本简单介绍(通俗易懂!!)

最简结构:三步走

想象你要「批量加工」一堆物品,步骤是:

  1. 拿一个筐(比如 List(1,2,3)
  2. 逐个处理每个物品(比如每个数 n
  3. 生成新筐(比如每个数变成平方)

写成代码就是:

scala复制代码

val 新筐 = for (物品 <- 旧筐) yield 加工后的物品
例子:水果变果干

scala复制代码

val 水果筐 = List("苹果", "香蕉", "橙子")

// 每个水果变成果干
val 果干筐 = for (水果 <- 水果筐) yield s"${水果}干"

// 结果:List("苹果干", "香蕉干", "橙子干")

加上过滤:只处理符合条件的

比如只要苹果做果干,其他不要:

scala复制代码

val 果干筐 = for {
  水果 <- 水果筐
  if 水果 == "苹果"  // 只留苹果
} yield s"${水果}干"

// 结果:List("苹果干")

多层循环:组合加工

比如用苹果做果汁和果酱,香蕉只做果酱:

scala复制代码

val 水果 = List("苹果", "香蕉")
val 做法 = List("果汁", "果酱")

val 成品 = for {
  f <- 水果          // 第一层循环:水果
  z <- 做法          // 第二层循环:做法
  if !(f == "香蕉" && z == "果汁") // 香蕉不做果汁
} yield s"${f}${z}"

// 结果:List("苹果果汁", "苹果果酱", "香蕉果酱")

核心规则

  1. 必须用 yield:没有它,代码就只是循环,不会生成新集合。
  2. 箭头 <-:表示从集合里「取出」元素。
  3. 代码顺序:先写循环(<-),再写过滤(if)。

常见错误

❌ 忘记写 yield

scala复制代码

// 错误!返回的是 Unit(无结果)
for (n <- List(1,2)) { n * 2 }
✅ 正确:

scala复制代码

// 正确!返回新集合 List(2,4)
for (n <- List(1,2)) yield n * 2

一句话总结

for-yield 就是:「遍历一个筐里的每个东西,按条件处理,最后打包成新筐」。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值