4
Java에서는 스트림에서 peek(x -> println(x))
으로 전화를 걸면 각 요소에 대한 작업을 수행하고 foreach와는 달리 Unit이라는 원래 스트림을 반환합니다. 스칼라와 비슷한 무언가가 있습니까? 모든 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); stream' – Dima
두 번째 것은 예상대로 작동하지 않습니다. – Det
http://stackoverflow.com/a/23231684/21755 –