Scala地图的突破

Scala地图的突破,scala,Scala,当满足这样的条件时,我需要打破一个seq映射,foo将返回一个对象列表,其中的大小取决于找到targetId所需的时间 def foo(ids: Seq[String], targetId: String) = ids.map(id => getObject(id)).until(id == targetId) 显然,until方法并不存在,但我正在寻找与之等效的方法。我使用了两种方法: 1) 将map替换为以某种方式处理事物的递归调用。如果有一些复杂的副作用,这非常方便 2) 使用St

当满足这样的条件时,我需要打破一个seq映射,
foo
将返回一个对象列表,其中的大小取决于找到targetId所需的时间

def foo(ids: Seq[String], targetId: String) = ids.map(id => getObject(id)).until(id == targetId)

显然,until方法并不存在,但我正在寻找与之等效的方法。我使用了两种方法:

1) 将
map
替换为以某种方式处理事物的递归调用。如果有一些复杂的副作用,这非常方便


2) 使用
Stream
Iterator
takeWhile
惰性地计算其元素,并在满足条件后终止。我会选择这个变体,因为它将接近第一个选项,但考虑得更多。

无需创建中间流/迭代器/视图

只需先打电话给takeWhile:

 ids.takeWhile(_ != targetId).map(getObject)

因为我使用的RDD很小,所以我使用take(n)实现了同样的效果