You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Either序列中仅提取Right值,将List(1,2,())转为List(1,2)?

从Either序列中提取Right值的解决方案

嘿,我来帮你搞定这个问题!你现在需要从包含Either类型的序列里只保留Right包裹的值,剔除掉Left的部分,对吧?

最简洁优雅的实现:使用collect方法

Scala的collect方法可以同时完成过滤和映射的操作,非常适合这种场景。它接收一个偏函数,只会处理匹配到的元素:

// 假设你的原始Either序列是这样的
val eitherSequence: List[Either[Unit, Int]] = List(Right(1), Right(2), Left(()))

// 提取所有Right值
val rightOnlyValues = eitherSequence.collect { case Right(value) => value }

// 输出结果:List(1, 2)

这个方法的好处是:

  • 一步到位,不需要先过滤再映射
  • 类型安全,偏函数只会处理Right类型的元素,避免了手动调用get可能带来的风险

另一种实现:filter + map

如果你更习惯分步操作,也可以先过滤出isRight为true的元素,再提取Right里的值:

val rightOnlyValues = eitherSequence
  .filter(_.isRight) // 只保留Right类型的元素
  .map(_.right.get)  // 提取Right包裹的值

这里因为已经通过filter确保了所有元素都是Right,所以调用right.get是安全的,不会抛出异常。

为什么原来的输出会包含()?

你之前的输出里出现(),是因为序列里存在Left(())这样的元素,而你的代码没有过滤掉Left类型,导致把Left包裹的()也纳入了结果集。通过上面的两种方法,就能精准筛选出Right里的数值啦!

内容的提问来源于stack exchange,提问作者ps0604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:23:54