斯卡拉突破了地图

use*_*913 6 scala

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

def foo(ids: Seq[String], targetId: String) = ids.map(id => getObject(id)).until(id == targetId)
Run Code Online (Sandbox Code Playgroud)

很明显,直到方法不存在,但我正在寻找相同的东西

Aiv*_*ean 14

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

先拨打电话 takeWhile:

 ids.takeWhile(_ != targetId).map(getObject)
Run Code Online (Sandbox Code Playgroud)


jde*_*lop 5

我使用的方法有两种:

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

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