斯卡拉突破了地图

时间:2015-10-23 02:24:41

标签: scala

当遇到类似这样的情况时,我需要突破seq映射,其中foo将返回一个对象列表,其中大小取决于查找targetId所需的时间

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

显然,until方法不存在,但我正在寻找能够实现等效的方法

3 个答案:

答案 0 :(得分:13)

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

首先致电takeWhile

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

答案 1 :(得分:5)

我使用的方法有两种:

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

2)使用StreamIteratortakeWhile懒惰地评估它的元素,并在条件满足后终止。我会选择这个变体,因为它将接近第一个选项 - 但更加明确。

答案 2 :(得分:0)

由于我使用的RDD很小,所以我使用take(n)达到了相同的效果。