当遇到类似这样的情况时,我需要突破seq映射,其中foo
将返回一个对象列表,其中大小取决于查找targetId所需的时间
def foo(ids: Seq[String], targetId: String) = ids.map(id => getObject(id)).until(id == targetId)
显然,until方法不存在,但我正在寻找能够实现等效的方法
答案 0 :(得分:13)
无需创建中间流/迭代器/视图。
首先致电takeWhile
:
ids.takeWhile(_ != targetId).map(getObject)
答案 1 :(得分:5)
我使用的方法有两种:
1)用以某种方式处理事物的递归调用替换map
。如果有一些复杂的副作用,那就非常方便。
2)使用Stream
或Iterator
和takeWhile
懒惰地评估它的元素,并在条件满足后终止。我会选择这个变体,因为它将接近第一个选项 - 但更加明确。
答案 2 :(得分:0)
由于我使用的RDD很小,所以我使用take(n)达到了相同的效果。