1. ホーム
  2. scala

[解決済み] フィルタの代わりにwithFilter

2023-07-02 08:12:34

質問

mapやflatmapなどの関数を後から適用する場合、filterではなくwithFilterを使用する方が常にパフォーマンスが高いのでしょうか?

なぜmap、flatmap、foreachしかサポートされていないのですか?(forall/existsのような関数も同様に期待されています。)

どのように解決するのですか?

から Scala のドキュメント :

注意: この c filter pc withFilter p は、前者が が新しいコレクションを作成するのに対し、後者では その後の map , flatMap , foreach そして withFilter の操作を行うことができます。

そこで filter は元のコレクションを取り出し、新しいコレクションを生成しますが withFilter はフィルタリングされていない値を非正規に(つまり、怠惰に)後の map / flatMap / withFilter を呼び出すことで、(フィルタリングされた)コレクションを再度通過する手間を省くことができます。したがって、後続のメソッド呼び出しに渡すときに、より効率的になります。

実際には withFilter はこれらのメソッドの連鎖を扱うために特別に設計されたもので、for comprehension はこのようにデスガされます。他のメソッド(例えば forall / exists ) はこのために必要なので、これらは FilterMonadic の戻り値の型は withFilter .