final class Stream[+F[_], +O] extends AnyVal
A stream producing output of type O
and which may evaluate F
effects. If F
is Pure, the stream evaluates no effects.
Much of the API of Stream
is defined in Stream.InvariantOps.
Laws (using infix syntax):
append
forms a monoid in conjunction with empty
:
empty append s == s
ands append empty == s
.(s1 append s2) append s3 == s1 append (s2 append s3)
And cons
is consistent with using ++
to prepend a single segment:
s.cons(seg) == Stream.segment(seg) ++ s
Stream.raiseError
propagates until being caught by handleErrorWith
:
Stream.raiseError(e) handleErrorWith h == h(e)
Stream.raiseError(e) ++ s == Stream.raiseError(e)
Stream.raiseError(e) flatMap f == Stream.raiseError(e)
Stream
forms a monad with emit
and flatMap
:
Stream.emit >=> f == f
(left identity)f >=> Stream.emit === f
(right identity - note weaker equality notion here)(f >=> g) >=> h == f >=> (g >=> h)
(associativity) whereStream.emit(a)
is defined assegment(Segment.singleton(a)) and
f >=> gis defined as
a => a flatMap f flatMap g
The monad is the list-style sequencing monad:
(a ++ b) flatMap f == (a flatMap f) ++ (b flatMap f)
Stream.empty flatMap f == Stream.empty
Technical notes
Note: since the segment structure of the stream is observable, and
s flatMap Stream.emit
produces a stream of singleton segments,
the right identity law uses a weaker notion of equality, ===
which
normalizes both sides with respect to segment structure:
(s1 === s2) = normalize(s1) == normalize(s2)
where ==
is full equality
(a == b
iff f(a)
is identical to f(b)
for all f
)
normalize(s)
can be defined as s.flatMap(Stream.emit)
, which just
produces a singly-chunked stream from any input stream s
.
Note: For efficiency Stream.map
function operates on an entire
segment at a time and preserves segment structure, which differs from
the map
derived from the monad (s map f == s flatMap (f andThen Stream.emit)
)
which would produce singleton segments. In particular, if f
throws errors, the
segmented version will fail on the first segment with an error, while
the unsegmented version will fail on the first element with an error.
Exceptions in pure code like this are strongly discouraged.
- Source
- Stream.scala
- Alphabetic
- By Inheritance
- Stream
- AnyVal
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- Any
-
final
def
##(): Int
- Definition Classes
- Any
- def +(other: String): String
-
def
->[B](y: B): (Stream[F, O], B)
- Implicit
- This member is added by an implicit conversion from Stream[F, O] to ArrowAssoc[Stream[F, O]] performed by method ArrowAssoc in scala.Predef. This conversion will take place only if F is a subclass of Id with Pure (F <: Id with Pure) and at the same time O is a subclass of Nothing (O <: Nothing).
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- Any
-
def
as[O2](o2: O2): Stream[F, O2]
Alias for
_.map(_ => o2)
.Alias for
_.map(_ => o2)
.scala> Stream(1,2,3).as(0).toList res0: List[Int] = List(0, 0, 0)
Example: -
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
attempt: Stream[F, Either[Throwable, O]]
Returns a stream of
O
values wrapped inRight
until the first error, which is emitted wrapped inLeft
.Returns a stream of
O
values wrapped inRight
until the first error, which is emitted wrapped inLeft
.scala> (Stream(1,2,3) ++ Stream.raiseError(new RuntimeException) ++ Stream(4,5,6)).attempt.toList res0: List[Either[Throwable,Int]] = List(Right(1), Right(2), Right(3), Left(java.lang.RuntimeException))
rethrow is the inverse of
attempt
, with the caveat that anything after the first failure is discarded.
Example: -
def
buffer(n: Int): Stream[F, O]
Behaves like the identity function, but requests
n
elements at a time from the input.Behaves like the identity function, but requests
n
elements at a time from the input.scala> import cats.effect.IO scala> val buf = new scala.collection.mutable.ListBuffer[String]() scala> Stream.range(0, 100).covary[IO]. | evalMap(i => IO { buf += s">$i"; i }). | buffer(4). | evalMap(i => IO { buf += s"<$i"; i }). | take(10). | compile.toVector.unsafeRunSync res0: Vector[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) scala> buf.toList res1: List[String] = List(>0, >1, >2, >3, <0, <1, <2, <3, >4, >5, >6, >7, <4, <5, <6, <7, >8, >9, >10, >11, <8, <9)
Example: -
def
bufferAll: Stream[F, O]
Behaves like the identity stream, but emits no output until the source is exhausted.
Behaves like the identity stream, but emits no output until the source is exhausted.
scala> import cats.effect.IO scala> val buf = new scala.collection.mutable.ListBuffer[String]() scala> Stream.range(0, 10).covary[IO]. | evalMap(i => IO { buf += s">$i"; i }). | bufferAll. | evalMap(i => IO { buf += s"<$i"; i }). | take(4). | compile.toVector.unsafeRunSync res0: Vector[Int] = Vector(0, 1, 2, 3) scala> buf.toList res1: List[String] = List(>0, >1, >2, >3, >4, >5, >6, >7, >8, >9, <0, <1, <2, <3)
Example: -
def
bufferBy(f: (O) ⇒ Boolean): Stream[F, O]
Behaves like the identity stream, but requests elements from its input in blocks that end whenever the predicate switches from true to false.
Behaves like the identity stream, but requests elements from its input in blocks that end whenever the predicate switches from true to false.
scala> import cats.effect.IO scala> val buf = new scala.collection.mutable.ListBuffer[String]() scala> Stream.range(0, 10).covary[IO]. | evalMap(i => IO { buf += s">$i"; i }). | bufferBy(_ % 2 == 0). | evalMap(i => IO { buf += s"<$i"; i }). | compile.toVector.unsafeRunSync res0: Vector[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) scala> buf.toList res1: List[String] = List(>0, >1, <0, <1, >2, >3, <2, <3, >4, >5, <4, <5, >6, >7, <6, <7, >8, >9, <8, <9)
Example: -
def
changesBy[O2](f: (O) ⇒ O2)(implicit eq: Eq[O2]): Stream[F, O]
Emits only elements that are distinct from their immediate predecessors according to
f
, using natural equality for comparison.Emits only elements that are distinct from their immediate predecessors according to
f
, using natural equality for comparison.Note that
f
is called for each element in the stream multiple times and hence should be fast (e.g., an accessor). It is not intended to be used for computationally intensive conversions. For such conversions, consider something like:src.map(o => (o, f(o))).changesBy(_._2).map(_._1)
scala> import cats.implicits._ scala> Stream(1,1,2,4,6,9).changesBy(_ % 2).toList res0: List[Int] = List(1, 2, 9)
Example: -
def
chunkLimit(n: Int): Stream[F, Chunk[O]]
Outputs chunk with a limited maximum size, splitting as necessary.
Outputs chunk with a limited maximum size, splitting as necessary.
scala> (Stream(1) ++ Stream(2, 3) ++ Stream(4, 5, 6)).chunkLimit(2).toList res0: List[Chunk[Int]] = List(Chunk(1), Chunk(2, 3), Chunk(4, 5), Chunk(6))
Example: -
def
chunks: Stream[F, Chunk[O]]
Outputs all chunks from the source stream.
Outputs all chunks from the source stream.
scala> (Stream(1) ++ Stream(2, 3) ++ Stream(4, 5, 6)).chunks.toList res0: List[Chunk[Int]] = List(Chunk(1), Chunk(2, 3), Chunk(4, 5, 6))
Example: -
def
collect[O2](pf: PartialFunction[O, O2]): Stream[F, O2]
Filters and maps simultaneously.
Filters and maps simultaneously. Calls
collect
on each segment in the stream.scala> Stream(Some(1), Some(2), None, Some(3), None, Some(4)).collect { case Some(i) => i }.toList res0: List[Int] = List(1, 2, 3, 4)
Example: -
def
collectFirst[O2](pf: PartialFunction[O, O2]): Stream[F, O2]
Emits the first element of the stream for which the partial function is defined.
Emits the first element of the stream for which the partial function is defined.
scala> Stream(None, Some(1), Some(2), None, Some(3)).collectFirst { case Some(i) => i }.toList res0: List[Int] = List(1)
Example: -
def
cons[O2 >: O](s: Segment[O2, Unit]): Stream[F, O2]
Prepends a segment onto the front of this stream.
Prepends a segment onto the front of this stream.
scala> Stream(1,2,3).cons(Segment.vector(Vector(-1, 0))).toList res0: List[Int] = List(-1, 0, 1, 2, 3)
Example: -
def
cons1[O2 >: O](o: O2): Stream[F, O2]
Prepends a single value onto the front of this stream.
Prepends a single value onto the front of this stream.
scala> Stream(1,2,3).cons1(0).toList res0: List[Int] = List(0, 1, 2, 3)
Example: -
def
consChunk[O2 >: O](c: Chunk[O2]): Stream[F, O2]
Prepends a chunk onto the front of this stream.
Prepends a chunk onto the front of this stream.
scala> Stream(1,2,3).consChunk(Chunk.vector(Vector(-1, 0))).toList res0: List[Int] = List(-1, 0, 1, 2, 3)
Example: -
def
covaryOutput[O2 >: O]: Stream[F, O2]
Lifts this stream to the specified output type.
Lifts this stream to the specified output type.
scala> Stream(Some(1), Some(2), Some(3)).covaryOutput[Option[Int]] res0: Stream[Pure,Option[Int]] = Stream(..)
Example: -
def
delete(p: (O) ⇒ Boolean): Stream[F, O]
Skips the first element that matches the predicate.
Skips the first element that matches the predicate.
scala> Stream.range(1, 10).delete(_ % 2 == 0).toList res0: List[Int] = List(1, 3, 4, 5, 6, 7, 8, 9)
Example: -
def
drain: Stream[F, Nothing]
Removes all output values from this stream.
Removes all output values from this stream.
Often used with
merge
to run one side of the merge for its effect while getting outputs from the opposite side of the merge.scala> import cats.effect.IO scala> Stream.eval(IO(println("x"))).drain.compile.toVector.unsafeRunSync res0: Vector[Nothing] = Vector()
Example: -
def
drop(n: Long): Stream[F, O]
Drops
n
elements of the input, then echoes the rest.Drops
n
elements of the input, then echoes the rest.scala> Stream.range(0,10).drop(5).toList res0: List[Int] = List(5, 6, 7, 8, 9)
Example: -
def
dropLast: Stream[F, O]
Drops the last element.
Drops the last element.
scala> Stream.range(0,10).dropLast.toList res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)
Example: -
def
dropLastIf(p: (O) ⇒ Boolean): Stream[F, O]
Drops the last element if the predicate evaluates to true.
Drops the last element if the predicate evaluates to true.
scala> Stream.range(0,10).dropLastIf(_ > 5).toList res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)
Example: -
def
dropRight(n: Int): Stream[F, O]
Outputs all but the last
n
elements of the input.Outputs all but the last
n
elements of the input.scala> Stream.range(0,10).dropRight(5).toList res0: List[Int] = List(0, 1, 2, 3, 4)
Example: -
def
dropThrough(p: (O) ⇒ Boolean): Stream[F, O]
Like dropWhile, but drops the first value which tests false.
Like dropWhile, but drops the first value which tests false.
scala> Stream.range(0,10).dropThrough(_ != 4).toList res0: List[Int] = List(5, 6, 7, 8, 9)
Example: -
def
dropWhile(p: (O) ⇒ Boolean): Stream[F, O]
Drops elements from the head of this stream until the supplied predicate returns false.
Drops elements from the head of this stream until the supplied predicate returns false.
scala> Stream.range(0,10).dropWhile(_ != 4).toList res0: List[Int] = List(4, 5, 6, 7, 8, 9)
Example: - def ensuring(cond: (Stream[F, O]) ⇒ Boolean, msg: ⇒ Any): Stream[F, O]
- def ensuring(cond: (Stream[F, O]) ⇒ Boolean): Stream[F, O]
- def ensuring(cond: Boolean, msg: ⇒ Any): Stream[F, O]
- def ensuring(cond: Boolean): Stream[F, O]
-
def
exists(p: (O) ⇒ Boolean): Stream[F, Boolean]
Emits
true
as soon as a matching element is received, elsefalse
if no input matches.Emits
true
as soon as a matching element is received, elsefalse
if no input matches.scala> Stream.range(0,10).exists(_ == 4).toList res0: List[Boolean] = List(true) scala> Stream.range(0,10).exists(_ == 10).toList res1: List[Boolean] = List(false)
Example: -
def
filter(p: (O) ⇒ Boolean): Stream[F, O]
Emits only inputs which match the supplied predicate.
Emits only inputs which match the supplied predicate.
scala> Stream.range(0,10).filter(_ % 2 == 0).toList res0: List[Int] = List(0, 2, 4, 6, 8)
Example: -
def
filterWithPrevious(f: (O, O) ⇒ Boolean): Stream[F, O]
Like
filter
, but the predicatef
depends on the previously emitted and current elements.Like
filter
, but the predicatef
depends on the previously emitted and current elements.scala> Stream(1, -1, 2, -2, 3, -3, 4, -4).filterWithPrevious((previous, current) => previous < current).toList res0: List[Int] = List(1, 2, 3, 4)
Example: -
def
find(f: (O) ⇒ Boolean): Stream[F, O]
Emits the first input (if any) which matches the supplied predicate.
Emits the first input (if any) which matches the supplied predicate.
scala> Stream.range(1,10).find(_ % 2 == 0).toList res0: List[Int] = List(2)
Example: -
def
fold[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, O2]
Folds all inputs using an initial value
z
and supplied binary operator, and emits a single element stream.Folds all inputs using an initial value
z
and supplied binary operator, and emits a single element stream.scala> Stream(1, 2, 3, 4, 5).fold(0)(_ + _).toList res0: List[Int] = List(15)
Example: -
def
fold1[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]
Folds all inputs using the supplied binary operator, and emits a single-element stream, or the empty stream if the input is empty.
Folds all inputs using the supplied binary operator, and emits a single-element stream, or the empty stream if the input is empty.
scala> Stream(1, 2, 3, 4, 5).fold1(_ + _).toList res0: List[Int] = List(15)
Example: -
def
foldMap[O2](f: (O) ⇒ O2)(implicit O2: Monoid[O2]): Stream[F, O2]
Alias for
map(f).foldMonoid
.Alias for
map(f).foldMonoid
.scala> import cats.implicits._ scala> Stream(1, 2, 3, 4, 5).foldMap(_ => 1).toList res0: List[Int] = List(5)
Example: -
def
forall(p: (O) ⇒ Boolean): Stream[F, Boolean]
Emits a single
true
value if all input matches the predicate.Emits a single
true
value if all input matches the predicate. Halts withfalse
as soon as a non-matching element is received.scala> Stream(1, 2, 3, 4, 5).forall(_ < 10).toList res0: List[Boolean] = List(true)
Example: - def formatted(fmtstr: String): String
-
def
getClass(): Class[_ <: AnyVal]
- Definition Classes
- AnyVal → Any
-
def
groupAdjacentBy[O2](f: (O) ⇒ O2)(implicit eq: Eq[O2]): Stream[F, (O2, Segment[O, Unit])]
Partitions the input into a stream of segments according to a discriminator function.
Partitions the input into a stream of segments according to a discriminator function.
Each chunk in the source stream is grouped using the supplied discriminator function and the results of the grouping are emitted each time the discriminator function changes values.
scala> import cats.implicits._ scala> Stream("Hello", "Hi", "Greetings", "Hey").groupAdjacentBy(_.head).toList.map { case (k,vs) => k -> vs.force.toList } res0: List[(Char,List[String])] = List((H,List(Hello, Hi)), (G,List(Greetings)), (H,List(Hey)))
Example: -
def
head: Stream[F, O]
Emits the first element of this stream (if non-empty) and then halts.
Emits the first element of this stream (if non-empty) and then halts.
scala> Stream(1, 2, 3).head.toList res0: List[Int] = List(1)
Example: -
def
intersperse[O2 >: O](separator: O2): Stream[F, O2]
Emits the specified separator between every pair of elements in the source stream.
Emits the specified separator between every pair of elements in the source stream.
scala> Stream(1, 2, 3, 4, 5).intersperse(0).toList res0: List[Int] = List(1, 0, 2, 0, 3, 0, 4, 0, 5)
Example: -
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
last: Stream[F, Option[O]]
Returns the last element of this stream, if non-empty.
Returns the last element of this stream, if non-empty.
scala> Stream(1, 2, 3).last.toList res0: List[Option[Int]] = List(Some(3))
Example: -
def
lastOr[O2 >: O](fallback: ⇒ O2): Stream[F, O2]
Returns the last element of this stream, if non-empty, otherwise the supplied
fallback
value.Returns the last element of this stream, if non-empty, otherwise the supplied
fallback
value.scala> Stream(1, 2, 3).lastOr(0).toList res0: List[Int] = List(3) scala> Stream.empty.lastOr(0).toList res1: List[Int] = List(0)
Example: -
def
map[O2](f: (O) ⇒ O2): Stream[F, O2]
Applies the specified pure function to each input and emits the result.
Applies the specified pure function to each input and emits the result.
scala> Stream("Hello", "World!").map(_.size).toList res0: List[Int] = List(5, 6)
Example: -
def
mapAccumulate[S, O2](init: S)(f: (S, O) ⇒ (S, O2)): Stream[F, (S, O2)]
Maps a running total according to
S
and the input with the functionf
.Maps a running total according to
S
and the input with the functionf
.scala> Stream("Hello", "World").mapAccumulate(0)((l, s) => (l + s.length, s.head)).toVector res0: Vector[(Int, Char)] = Vector((5,H), (10,W))
Example: -
def
mapChunks[O2](f: (Chunk[O]) ⇒ Segment[O2, Unit]): Stream[F, O2]
Applies the specified pure function to each chunk in this stream.
Applies the specified pure function to each chunk in this stream.
scala> Stream(1, 2, 3).append(Stream(4, 5, 6)).mapChunks { c => val ints = c.toInts; for (i <- 0 until ints.values.size) ints.values(i) = 0; ints.toSegment }.toList res0: List[Int] = List(0, 0, 0, 0, 0, 0)
Example: -
def
mapSegments[O2](f: (Segment[O, Unit]) ⇒ Segment[O2, Unit]): Stream[F, O2]
Applies the specified pure function to each segment in this stream.
Applies the specified pure function to each segment in this stream.
scala> (Stream.range(1,5) ++ Stream.range(5,10)).mapSegments(s => s.scan(0)(_ + _).voidResult).toList res0: List[Int] = List(0, 1, 3, 6, 10, 0, 5, 11, 18, 26, 35)
Example: -
def
mask: Stream[F, O]
Behaves like the identity function but halts the stream on an error and does not return the error.
Behaves like the identity function but halts the stream on an error and does not return the error.
scala> (Stream(1,2,3) ++ Stream.raiseError(new RuntimeException) ++ Stream(4, 5, 6)).mask.toList res0: List[Int] = List(1, 2, 3)
Example: -
def
noneTerminate: Stream[F, Option[O]]
Emits each output wrapped in a
Some
and emits aNone
at the end of the stream.Emits each output wrapped in a
Some
and emits aNone
at the end of the stream.s.noneTerminate.unNoneTerminate == s
scala> Stream(1,2,3).noneTerminate.toList res0: List[Option[Int]] = List(Some(1), Some(2), Some(3), None)
Example: -
def
reduce[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]
Alias for fold1.
-
def
repeat: Stream[F, O]
Repeat this stream an infinite number of times.
Repeat this stream an infinite number of times.
s.repeat == s ++ s ++ s ++ ...
scala> Stream(1,2,3).repeat.take(8).toList res0: List[Int] = List(1, 2, 3, 1, 2, 3, 1, 2)
Example: -
def
rethrow[O2](implicit ev: <:<[O, Either[Throwable, O2]]): Stream[F, O2]
Converts a
Stream[F,Either[Throwable,O]]
to aStream[F,O]
, which emits right values and fails upon the firstLeft(t)
.Converts a
Stream[F,Either[Throwable,O]]
to aStream[F,O]
, which emits right values and fails upon the firstLeft(t)
. Preserves chunkiness.scala> Stream(Right(1), Right(2), Left(new RuntimeException), Right(3)).rethrow.handleErrorWith(t => Stream(-1)).toList res0: List[Int] = List(-1)
Example: -
def
scan[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, O2]
Left fold which outputs all intermediate results.
Left fold which outputs all intermediate results.
scala> Stream(1,2,3,4).scan(0)(_ + _).toList res0: List[Int] = List(0, 1, 3, 6, 10)
More generally:
Stream().scan(z)(f) == Stream(z)
Stream(x1).scan(z)(f) == Stream(z, f(z,x1))
Stream(x1,x2).scan(z)(f) == Stream(z, f(z,x1), f(f(z,x1),x2))
etc
Example: -
def
scan1[O2 >: O](f: (O2, O2) ⇒ O2): Stream[F, O2]
Like
scan
, but uses the first element of the stream as the seed.Like
scan
, but uses the first element of the stream as the seed.scala> Stream(1,2,3,4).scan1(_ + _).toList res0: List[Int] = List(1, 3, 6, 10)
Example: -
def
scope: Stream[F, O]
Scopes are typically inserted automatically, at the boundary of a pull (i.e., when a pull is converted to a stream).
Scopes are typically inserted automatically, at the boundary of a pull (i.e., when a pull is converted to a stream). This method allows a scope to be explicitly demarcated so that resources can be freed earlier than when using automatically inserted scopes. This is useful when using
streamNoScope
to convert fromPull
toStream
-- i.e., by choosing to *not* have scopes inserted automatically, you may end up needing to demarcate scopes manually at a higher level in the stream structure.Note: see the disclaimer about the use of
streamNoScope
. -
def
segmentLimit(n: Int): Stream[F, Segment[O, Unit]]
Outputs the segments of this stream as output values, ensuring each segment has maximum size
n
, splitting segments as necessary.Outputs the segments of this stream as output values, ensuring each segment has maximum size
n
, splitting segments as necessary.scala> Stream(1,2,3).repeat.segmentLimit(2).take(5).toList res0: List[Segment[Int,Unit]] = List(Chunk(1, 2), Chunk(3), Chunk(1, 2), Chunk(3), Chunk(1, 2))
Example: -
def
segmentN(n: Int, allowFewer: Boolean = true): Stream[F, Segment[O, Unit]]
Outputs segments of size
n
.Outputs segments of size
n
.Segments from the source stream are split as necessary. If
allowFewer
is true, the last segment that is emitted may have less thann
elements.scala> Stream(1,2,3).repeat.segmentN(2).take(5).toList res0: List[Segment[Int,Unit]] = List(Chunk(1, 2), catenated(Chunk(3), Chunk(1)), Chunk(2, 3), Chunk(1, 2), catenated(Chunk(3), Chunk(1)))
Example: -
def
segments: Stream[F, Segment[O, Unit]]
Outputs all segments from the source stream.
Outputs all segments from the source stream.
scala> Stream(1,2,3).repeat.segments.take(5).toList res0: List[Segment[Int,Unit]] = List(Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3), Chunk(1, 2, 3))
Example: -
def
sliding(n: Int): Stream[F, Queue[O]]
Groups inputs in fixed size chunks by passing a "sliding window" of size
n
over them.Groups inputs in fixed size chunks by passing a "sliding window" of size
n
over them. If the input contains less than or equal ton
elements, only one chunk of this size will be emitted.scala> Stream(1, 2, 3, 4).sliding(2).toList res0: List[scala.collection.immutable.Queue[Int]] = List(Queue(1, 2), Queue(2, 3), Queue(3, 4))
- Exceptions thrown
scala.IllegalArgumentException
ifn
<= 0
Example: -
def
split(f: (O) ⇒ Boolean): Stream[F, Segment[O, Unit]]
Breaks the input into chunks where the delimiter matches the predicate.
Breaks the input into chunks where the delimiter matches the predicate. The delimiter does not appear in the output. Two adjacent delimiters in the input result in an empty chunk in the output.
scala> Stream.range(0, 10).split(_ % 4 == 0).toList res0: List[Segment[Int,Unit]] = List(empty, catenated(Chunk(1), Chunk(2), Chunk(3), empty), catenated(Chunk(5), Chunk(6), Chunk(7), empty), Chunk(9))
Example: -
def
tail: Stream[F, O]
Emits all elements of the input except the first one.
Emits all elements of the input except the first one.
scala> Stream(1,2,3).tail.toList res0: List[Int] = List(2, 3)
Example: -
def
take(n: Long): Stream[F, O]
Emits the first
n
elements of this stream.Emits the first
n
elements of this stream.scala> Stream.range(0,1000).take(5).toList res0: List[Int] = List(0, 1, 2, 3, 4)
Example: -
def
takeRight(n: Long): Stream[F, O]
Emits the last
n
elements of the input.Emits the last
n
elements of the input.scala> Stream.range(0,1000).takeRight(5).toList res0: List[Int] = List(995, 996, 997, 998, 999)
Example: -
def
takeThrough(p: (O) ⇒ Boolean): Stream[F, O]
Like takeWhile, but emits the first value which tests false.
Like takeWhile, but emits the first value which tests false.
scala> Stream.range(0,1000).takeThrough(_ != 5).toList res0: List[Int] = List(0, 1, 2, 3, 4, 5)
Example: -
def
takeWhile(p: (O) ⇒ Boolean, takeFailure: Boolean = false): Stream[F, O]
Emits the longest prefix of the input for which all elements test true according to
f
.Emits the longest prefix of the input for which all elements test true according to
f
.scala> Stream.range(0,1000).takeWhile(_ != 5).toList res0: List[Int] = List(0, 1, 2, 3, 4)
Example: -
def
toString(): String
- Definition Classes
- Stream → Any
-
def
unNone[O2](implicit ev: <:<[O, Option[O2]]): Stream[F, O2]
Filters any 'None'.
Filters any 'None'.
scala> Stream(Some(1), Some(2), None, Some(3), None).unNone.toList res0: List[Int] = List(1, 2, 3)
Example: -
def
unNoneTerminate[O2](implicit ev: <:<[O, Option[O2]]): Stream[F, O2]
Halts the input stream at the first
None
.Halts the input stream at the first
None
.scala> Stream(Some(1), Some(2), None, Some(3), None).unNoneTerminate.toList res0: List[Int] = List(1, 2)
Example: -
def
unchunk: Stream[F, O]
Converts the input to a stream of 1-element chunks.
Converts the input to a stream of 1-element chunks.
scala> (Stream(1,2,3) ++ Stream(4,5,6)).unchunk.segments.toList res0: List[Segment[Int,Unit]] = List(Chunk(1), Chunk(2), Chunk(3), Chunk(4), Chunk(5), Chunk(6))
Example: -
def
zipWithIndex: Stream[F, (O, Long)]
Zips the elements of the input stream with its indices, and returns the new stream.
Zips the elements of the input stream with its indices, and returns the new stream.
scala> Stream("The", "quick", "brown", "fox").zipWithIndex.toList res0: List[(String,Long)] = List((The,0), (quick,1), (brown,2), (fox,3))
Example: -
def
zipWithNext: Stream[F, (O, Option[O])]
Zips each element of this stream with the next element wrapped into
Some
.Zips each element of this stream with the next element wrapped into
Some
. The last element is zipped withNone
.scala> Stream("The", "quick", "brown", "fox").zipWithNext.toList res0: List[(String,Option[String])] = List((The,Some(quick)), (quick,Some(brown)), (brown,Some(fox)), (fox,None))
Example: -
def
zipWithPrevious: Stream[F, (Option[O], O)]
Zips each element of this stream with the previous element wrapped into
Some
.Zips each element of this stream with the previous element wrapped into
Some
. The first element is zipped withNone
.scala> Stream("The", "quick", "brown", "fox").zipWithPrevious.toList res0: List[(Option[String],String)] = List((None,The), (Some(The),quick), (Some(quick),brown), (Some(brown),fox))
Example: -
def
zipWithPreviousAndNext: Stream[F, (Option[O], O, Option[O])]
Zips each element of this stream with its previous and next element wrapped into
Some
.Zips each element of this stream with its previous and next element wrapped into
Some
. The first element is zipped withNone
as the previous element, the last element is zipped withNone
as the next element.scala> Stream("The", "quick", "brown", "fox").zipWithPreviousAndNext.toList res0: List[(Option[String],String,Option[String])] = List((None,The,Some(quick)), (Some(The),quick,Some(brown)), (Some(quick),brown,Some(fox)), (Some(brown),fox,None))
Example: -
def
zipWithScan[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, (O, O2)]
Zips the input with a running total according to
S
, up to but not including the current element.Zips the input with a running total according to
S
, up to but not including the current element. Thus the initialz
value is the first emitted to the output:scala> Stream("uno", "dos", "tres", "cuatro").zipWithScan(0)(_ + _.length).toList res0: List[(String,Int)] = List((uno,0), (dos,3), (tres,6), (cuatro,10))
- See also
Example: -
def
zipWithScan1[O2](z: O2)(f: (O2, O) ⇒ O2): Stream[F, (O, O2)]
Zips the input with a running total according to
S
, including the current element.Zips the input with a running total according to
S
, including the current element. Thus the initialz
value is the first emitted to the output:scala> Stream("uno", "dos", "tres", "cuatro").zipWithScan1(0)(_ + _.length).toList res0: List[(String, Int)] = List((uno,3), (dos,6), (tres,10), (cuatro,16))
- See also
Example: -
def
→[B](y: B): (Stream[F, O], B)
- Implicit
- This member is added by an implicit conversion from Stream[F, O] to ArrowAssoc[Stream[F, O]] performed by method ArrowAssoc in scala.Predef. This conversion will take place only if F is a subclass of Id with Pure (F <: Id with Pure) and at the same time O is a subclass of Nothing (O <: Nothing).
- Definition Classes
- ArrowAssoc