2016-07-08 7 views
4

Javaでは、ストリーム上でpeek(x -> println(x))を呼び出すことができます。これは、各要素のアクションを実行し、foreachというUnitとは異なり、元のストリームを返します。 Scalaに似たようなものがあります。理想的にはすべてのMonadyタイプで動作し、副作用のアクションを実行しながらオリジナルのMonadを "通過"することができますか? (ログは、例えば)ScalaにJava Streamの "peek"操作のようなものがありますか?

もちろん簡単に実装は次のとおりです。

def tap[A, U](a: A)(action: (A) => U): A = { 
    action(a) 
    a 
} 

が、私はもう少しエレガントまたは慣用何かを願っています。その後、ネイティブ

class Tappable[A](a: A) { 
    def tap[U](action: (A) => U): A = { 
    action(a) 
    a 
    } 
} 

implicit def any2Tappable[A](a: A): Tappable[A] = new Tappable[A](a) 

を使用することができます:

connection.tap(_.connect()) match { 
    case c if c.getResponseCode == 304 => None 
    ... 

その他の回答これを解決する

+0

'stream.map {x => println(x); x} 'または' stream.foreach(println);ストリーム ' – Dima

+0

2番目のものは期待どおりに動作しませんでした。 – Det

+1

http://stackoverflow.com/a/23231684/21755 –

答えて

0

一つの方法は、暗黙を使用していますか?

関連する問題