IT序号网

scala之Scala 中的 flatMap 函数

sky-heaven 2025年01月19日 编程语言 13 0

在以下两个场景中,我在列表上调用了 flatMap 函数。在这两种情况下,flatMap 函数的映射部分都会返回一个包含迭代器的数组。在第一种情况下,代码会出错,而在第二种情况下,它会产生预期的结果。

场景一

val x = List("abc","cde") 
x flatMap ( e => e.toArray) 
<console>:13: error: polymorphic expression cannot be instantiated to expected type; 
 found   : [B >: Char]Array[B] 
 required: scala.collection.GenTraversableOnce[?] 
       x flatMap ( e => e.toArray) 

场景 2

val x = List("abc,def") 
x flatMap ( e => e.split(",") ) 
res1: List[String] = List(abc, def) //Result 

请问为什么在第一种情况下,它没有按预期运行?

请您参考如下方法:

我认为不同之处在于,在场景 1 中,您实际上有一个 Array[B],其中 B 的某个尚未确定的父类(super class)型字符。通常,编译器会寻找到 GenTraversableOnce 的隐式转换,但由于 B 尚不清楚,您会遇到类型推断问题/限制。

您可以通过填写 B 来帮助类型推断。

List("abc", "cde").flatMap(_.toArray[Char]) 

或者更好的是,在这种情况下您不需要 flatMap。只需调用 flatten

List("abc", "cde").flatten 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!