私はtakeWhile
のユースケースを持っていますが、述語がtrueの後は固定数のアイテムを保持したいところです。私はまた、コレクションのタイプに対してできるだけジェネリックであるように記述しようとしています。だから、のようなもの:それはStream
で動作するようにしたいので、スカラにオフセット付きジェネリックtakeWhileを書く
def takeWhileWithOffset[A, Iter[_] <: Iterable[A]](iter: Iter[A], p: A => Boolean, offset: Int)
私は、バウンドとしてIterable
を選びました。しかし、私はこの作業をどうやって行うかを考え出すのに苦労しています。厳密なコレクションを使用していた場合、オフセットが正でない場合はdropRight
を使用できます。しかしIterable
にはdropRight
がありません。
陽性のケースはトリッキーです。私はsliding
を使って、将来のアイテムを効果的につかみ、takeWhile
終了後にinit
とlastOption
を使用することができました。しかしIterable
はinit
とlastOption
を持っていません。
それでは、トリッキーなのは、私は私の方法は怠惰になりたい、まだアイテムが厳しいコレクションとして扱うことができ、反復事実を利用することである - しかし場合のみtakeWhile
終了。これを行う方法はありますか?
今、私はハハ、ダム感じます。ダンベルを感じるリスク、ボーナスとして負のオフセットはどうですか? – acjay
私はあなたのことを知っています。キャプチャされたカウンターで折ることも、持ち帰ることもできますが、スパンはかなり飛びます。また、怠惰があるかどうかテストする必要があります。つまり、これは完全に怠惰であり、心配する必要はありません。 –