【发布时间】:2018-02-07 14:04:39
【问题描述】:
我有一个takeWhile 的用例,但我想在谓词为真后保留固定数量的项目。我也试图将它写成尽可能通用的集合类型。所以像:
def takeWhileWithOffset[A, Iter[_] <: Iterable[A]](iter: Iter[A], p: A => Boolean, offset: Int)
我选择Iterable 作为绑定,因为希望它与Stream 一起工作。但是我很难弄清楚如何使这项工作。如果我使用严格的集合,如果偏移量不是正数,我可以使用dropRight。但是Iterable 没有dropRight。
正面的情况比较棘手。我可以使用sliding 有效地抓取未来的项目,然后在takeWhile 终止后使用init 和lastOption。但是Iterable 没有init 和lastOption。
所以棘手的是我希望我的方法是惰性的,但要利用迭代项可以被视为严格集合这一事实——但仅当takeWhile 终止。有没有办法做到这一点?
【问题讨论】:
标签: scala collections stream scala-collections lazy-sequences