在 HashMap 列表上应用折叠函数并返回 Scala 中另一种类型的列表
我试图在包含不同类型元素的列表上使用折叠函数。 这是我的代码的简化版本:
val list: List[Int] = List(1, 1, 1, 1)
val listOfMap: List[Map[String, Int]]= List(Map("a" -> 1), Map("a" -> 2))
def addN(list: List[Int], n: Int) = list.map(_+n)
val result = listOfMap.fold(list)((x, y) => addN(x, y("a")))
我期望 结果
将是一个整数列表:
List(4, 4, 4, 4)
但是,我的错误得到的类型不匹配:
x:必需:List[Int],找到:Iterable[Any],带有部分函数[Int with String,Int],带有等于
“a” :必需:Int with String、Found String
I am trying to use the fold function on Lists that contain elements of different types.
Here's a simplified version of my code:
val list: List[Int] = List(1, 1, 1, 1)
val listOfMap: List[Map[String, Int]]= List(Map("a" -> 1), Map("a" -> 2))
def addN(list: List[Int], n: Int) = list.map(_+n)
val result = listOfMap.fold(list)((x, y) => addN(x, y("a")))
I am expecting the result
will be a List of Integer:
List(4, 4, 4, 4)
However, the error that I got were Type Mismatch for:
x : Required: List[Int], Found: Iterable[Any] with Partial Function[Int with String, Int] with Equals
"a": Required: Int with String, Found String
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
折叠 不要做你的想法。
对于此类问题,Scala 标准库文档是您的朋友: https: //www.scala-lang.org/api/2.13.3/index.html
使用指定的关联二元运算符折叠此集合的元素。
您需要 FoldLeft
将二元运算符应用于起始值和该序列的所有元素,从左到右。
注意:对于无限大小的集合不会终止。
在你的情况下
fold don't do what you think.
For this kind of problem, Scala standard Library Documentation is your friend : https://www.scala-lang.org/api/2.13.3/index.html
Folds the elements of this collection using the specified associative binary operator.
You need foldLeft instead
Applies a binary operator to a start value and all elements of this sequence, going left to right.
Note: will not terminate for infinite-sized collections.
in your case