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

Scala 2中如何对zip操作的结果进行过滤?

正确的Scala实现方式

修复filter写法

你之前的filter语法存在错误,Scala不支持那种混合占位符和类型声明的匿名函数写法。正确的写法可以是两种:

  • 用模式匹配提取元组元素:
a.zip(b).filter { case (aItem, _) => aItem.isInstanceOf[C] }
  • 直接使用匿名函数参数:
a.zip(b).filter(tuple => tuple._1.isInstanceOf[C])

正确使用collect(推荐)

你之前的collect写法无效是因为泛型类型擦除:JVM运行时无法区分(C, B)和(A, B)的元组类型,所以直接匹配元组整体类型会失效。正确的做法是在模式匹配中单独匹配第一个元素的类型:

a.zip(b).collect { case (cItem: C, bItem) => (cItem, bItem) }

这种写法不仅完成了过滤,还会把结果中第一个元素的类型从A细化为C,更符合Scala的类型安全风格,比isInstanceOf更惯用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:21:39