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
...
その他の回答これを解決する
'stream.map {x => println(x); x} 'または' stream.foreach(println);ストリーム ' – Dima
2番目のものは期待どおりに動作しませんでした。 – Det
http://stackoverflow.com/a/23231684/21755 –