我将提供一个简化的代码来轻松解释我的问题:
val balance = 10
for(elem <- dataList) yield (interest(elem, balance))
进行迭代的数据列表。
如何将这个新返回的值用于我的数据列表中的下一个元素的yield,这样我可以保持列表中下一个元素的最新余额?
即。 for(elem <- dataList) yield (interest(elem, newBalanceFromPreviousYield))
答案 0 :(得分:1)
我不确定这个问题你最终会得到什么结果:只是每个元素的最终余额或余额清单?假设后一个(因为这是for / yield应用于列表的结果类型),scan
操作就是你需要的:
dataList.scanLeft(10)((acc, currentElem) => interest(currentElem, acc)).tail
答案 1 :(得分:0)
我认为,只有yield
才能使用它。你的用例提醒折叠模式,所以,让我们使用它。我们累积余额并在interest()
调用中使用它:
dataList.foldLeft(List.empty[Int]) { (acc, elem) =>
acc match {
case Nil =>
// if no balances accumulated yet, use default balance = 10
List(interest(elem, balance))
case all@newBalance :: _ =>
// else use accumulated balance
interest(elem, newBalance) :: all
}
}.reverse // we need to reverse result list due to :: usage