2017-09-06 4 views
0

もちろん、フィルターやマップ関数の後にリストを抽出してサイズを印刷することで、このコードを破ることができます。しかし、学習のために、私はこの機能連鎖を保つことができるより良いソリューションがあるかどうか疑問に思っています。機能連鎖の間にリストのサイズを印刷するための方法はありますか?

listOfSomething.filter(condition).map(e => e.mapToSomeOther).mkString(DELIMITER)

+0

変数を使用して、チェーンにカウンタを設定することはできません。 –

答えて

0

あり、副作用を持つ不変のシーケンスには方法は、私の知る限りで、ありませんが、あなたがそうのような副作用のメソッド(私はこれをお勧めしません)とAPIを豊かにすることができます

scala> implicit class PrintSize[T](xs: List[T]){ def printSize = { println(xs.size); xs} } 
defined class PrintSize 

scala> List(1, 2, 3, 4, 5, 6, 7).filter(_ > 3).printSize.map(_ * 2).mkString(",") 
4 
res2: String = 8,10,12,14 

一時的な結果の抽出に関する最初の提案は、の前後に副作用を行うことができるため、はるかに優れています。

+0

クール!それが私が探していたものです。私はそれを少し拡張して、フィルタ処理を変更し、印刷部分を注入することができました。 '暗黙のクラスFilterWithLog [T](xs:Set [T]){ def filterEntities(filter:T => Boolean)= { val filteredEntities = xs.filter(フィルター) のprintln(s "のエンティティの数は$ {xs.size}から$ {} filteredEntities.sizeまで行ってきました") }} ' しかし、それは、はいそう過剰性能のように見えます私は元の一時的な結果抽出ソリューションにとどまります。私の学習曲線のためだけに必要でした。 – csmarton

関連する問題