t
scalqa

Stream.Flow

trait _Trait[A] extends _extend[A] with _consume[A] with _info[A]

Potentially Parallel Flow

Stream.Flow is Stream's parent, with only methods able of parallel processing

There are methods in Stream._extend._flow, which can turn Stream into a parallel Flow

Ordering
  1. Alphabetic
Inherited
  1. Flow
  2. Flow._info
  3. Flow._consume
  4. Flow._consume._foreach
  5. Flow._consume._evaluate
  6. Flow._consume._convert
  7. Flow._consume._aggregate
  8. Flow._extend
  9. Flow._extend._peek
  10. Flow._extend._map
  11. Flow._extend._flow
  12. Flow._extend._filter
  13. Flow._extend.Z.Shared
  14. scala.AnyRef
  15. scala.Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Method

  1. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  2. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  3. def collect[B](f: PartialFunction[A, B])(implicit arg0: Tag[B]): Flow[B]

    Filter and converter

    Filter and converter

    Only lets elements for which given PartialFinction is defined

    The elements are converted to returned type

    def all = ~~[Any] + "ABC" + 1 + 22.0 + "DE" + 333F + "F"
    
    all.lp                                     // Prints ~(ABC, 1, 22.0, DE, 333.0, F)
    
    all.collect{
        case s: String if (s.length > 1) => s
    }.lp                                       // Prints ~(ABC, DE)

    Note. collect always requires double evaluation for each element, so letMap is preferred in many cases

    Definition Classes
    Shared
  4. def collectOpt[B](f: PartialFunction[A, B]): Opt[B]

    Find first matching option

    Find first matching option

    The matching element is mapped with the functions

    def stream = ~~[Any] + 1 + "ABC" + 22.0 + "DE" + 333F + "F"
    
    // Find length of the first matching string
    stream.collectOpt{
      case s: String if (s.length > 1) => s.length
    }.lp    // Prints: Opt(3)
    Definition Classes
    _evaluate
  5. def contains[B >: A](value: B): Boolean

    Includes check

    Includes check

    Returns true if there is element equal to the given value

    def all: ~[Char] = 'a' to 'f'
    
    all.contains('c')       // Returns true
    
    all.contains('y')       // Returns false
    Definition Classes
    _evaluate
  6. def copyTo(b: Idx.Buffer.Loader[A]): Unit

    Copy to buffer

    Copy to buffer

    This is potentially the most efficient way to get all Stream elements

    Idx.Buffer.Loader provides a trustless way to copy arrays in bulk, so many array based Streams can take advantage of this

    Definition Classes
    _convert
  7. def count(f: Filter[A]): Int

    Element conditional count

    Element conditional count

    Returns count of elements satisfying the filter

    Definition Classes
    _evaluate
  8. abstract def count: Int

    All elements count

    All elements count

    Returns count of all elements

    ('a' to 'z').all.count  // Returns 26
    Definition Classes
    _evaluate
  9. def countAndSeconds: (Int, Double)

    Element count and time

    Element count and time

    Returns total count and time in seconds it took to pump the pipeline from first to last elements

    val (count, seconds) = (1 to 1000).all.peek(_ => Thread.sleep(1)).countAndSeconds
    
    println("Count = " + count + ", done in " + seconds + " secs")
    
    // Output
    Count = 1000, done in 1.004261423 secs
    Definition Classes
    _evaluate
  10. def countFew(f: Filter[A]*): Seq[Int]

    Element multi count

    Element multi count

    Counts elements for several filters at once

    Returns Seq, where each Int corresponds to the given filter index

    val Seq(total, odd, even) = (1 to 50).all.countFew(_ => true, _ % 2 == 1, _ % 2 == 0)
    
    println("total=" + total + ", odd=" + odd + ", even=" + even)
    
    // Output
    total=50, odd=25, even=25
    f

    several filters

    Definition Classes
    _evaluate
  11. def drain: Unit

    Discharge everything

    Discharge everything

    Calls foreach, discarding all retrieved elements

    Even though nothing is done at this point, this method can be run for the benefit of other functions in the pipeline

    ('A' to 'C').all.peek(v => println("Process " + v)).drain
    
    // Output
    Process A
    Process B
    Process C
    Definition Classes
    _foreach
  12. def drop(f: Filter[A]): Flow[A]

    Reversed filter

    Reversed filter

    Discards all the elements satisfying the filter

    (1 to 10).all.drop(_ % 2 == 0).lp // Prints: ~(1, 3, 5, 7, 9)
    Definition Classes
    _filter
  13. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  15. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  16. def find(f: Filter[A]): A

    Find

    Find

    Returns the first element satisfying the given filter

    Fails if none found

    (1 to 1000).all.find(_ > 100)   // Returns 101
    Definition Classes
    _evaluate
  17. abstract def findAnyOpt: Opt[A]
    Attributes
    protected
    Definition Classes
    _evaluate
  18. def findOpt(f: Filter[A]): Opt[A]

    Find

    Find

    Optionally returns the first element satisfying the given filter

    (1 to 1000).all.findOpt(_ > 100)   // Returns Opt(101)
    Definition Classes
    _evaluate
  19. abstract def flatMap[B](f: Mapping[A, ~[B]])(implicit arg0: Tag[B]): Flow[B]

    Map multiplier

    Map multiplier

    For every existing element, a mapped stream of elements is inserted into the pipeline

    Note. The mapping can return an empty stream, in which case total number of elements might even be reduced

    ~~(1, 2, 3).flatMap(i => Seq(i * 10, i * 100, i * 1000)).lp
    
    // Output
    ~(10, 100, 1000, 20, 200, 2000, 30, 300, 3000)
    f

    function to provide a stream of elements for each existing element

    Definition Classes
    _map
  20. def fold(start: A)(bf: Folding[A]): A

    Basic fold

    Basic fold

    Folds elements with a binary function

    Returns start value for empty pipeline

    // Multiply every element by next
    
    (1 to 10).all.fold(1)(_ * _)   // Returns 3628800
    start

    seed value to start with

    bf

    binary function to fold elements with

    Definition Classes
    _aggregate
  21. abstract def foldFlowAs[B](start: B)(bf: Folding.As[B, A], cf: Folding[B])(implicit arg0: Tag[B]): B

    Fold and convert

    Fold and convert

    Folds and converts elements with a binary function.

    Returns start value for empty pipeline

    start

    seed value to start with

    bf

    binary function to fold elements with

    cf

    collect function to put together results of parallel computations. It is not required and ignored for Stream

    Definition Classes
    _aggregate
  22. abstract def foreach(f: Consumer[A]): Unit

    For each

    For each

    Applies given function for each element

    (1 to 3).all.foreach(v => println("Element: " + v))
    
    // Output
    Element: 1
    Element: 2
    Element: 3
    Definition Classes
    _foreach
  23. def format(separator: Opt[String] = \/, padBefore: Opt[String] = \/, padAfter: Opt[String] = \/, converter: Opt[(A) ⇒ String] = \/): String

    Elements as String

    Elements as String

    All elements are converted toString

    The results are concatenated with possible use of padding and separator

    ('a' to 'j').all.format()              // Returns abcdefghij
    
    ('a' to 'j').all.format("|")           // Returns a|b|c|d|e|f|g|h|i|j
    
    ('a' to 'j').all.format(",", "[", "]") // Returns [a],[b],[c],[d],[e],[f],[g],[h],[i],[j]
    separator

    optional string between elements

    padBefore

    optional string before each element

    padAfter

    optional string after each element

    converter

    custom element to String function

    Definition Classes
    _convert
  24. def hashCode(): Int
    Definition Classes
    AnyRef → Any
  25. def isAny(f: Filter[A]): Boolean

    Any check

    Any check

    Returns true if there is an element satisfying the filter

    def all: ~[Int] = 1 to 100
    
    all.isAny(_ > 10)   // Returns true
    
    all.isAny(_ > 100)  // Returns false
    Definition Classes
    _evaluate
  26. def isEvery(f: Filter[A]): Boolean

    Every check

    Every check

    Returns true if every element is satisfying the filter

    def all: ~[Int] = 1 to 100
    
    all.isEvery(_ > 10)    // Returns false
    
    all.isEvery(_ > 0)     // Returns true
    Definition Classes
    _evaluate
  27. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  28. abstract def isParallel: Boolean

    Parallel check

    Parallel check

    Returns true if this Flow is parallel

    Definition Classes
    _Trait
  29. abstract def let(f: Filter[A]): Flow[A]

    Main filter

    Main filter

    Only lets elements satisfying the filter

    let is the main filtering method ('filter' is supported for compatibility only)

    (1 to 10).all.let(_ % 2 == 0).lp // Prints: ~(2, 4, 6, 8, 10)
    Definition Classes
    _filter
  30. def letMap[B](f: Mapping[A, Opt[B]])(implicit arg0: Tag[B]): Flow[B]

    Filter and converter

    Filter and converter

    Only lets elements for which given function returns non empty Opt

    The elements are converted to the new type

    def all = "ABC" ~+ "1" + "22" + "D" + "333" + "E"
    
    all.letMap(v => if (v.length < 2) \/ else v).lp // Prints: ~(ABC, 22, 333)
    
    all.letMap({
      case s if (s.length >= 2) => s
      case _                    => \/
    }).lp                                           // Prints: ~(ABC, 22, 333)

    Note: letMap is often a faster alternative to collect with PartialFunction, because it is evaluated just once for each element

    Definition Classes
    Shared
  31. def letType[B](implicit t: ClassTag[B]): Flow[B]

    Filter and type converter

    Filter and type converter

    Only lets elements, which are instances of the given type

    Note, the result is mapped to the specified type

    def all = ~~[Any] + "1" + 2 + 3.0 + 4l + "5"
    
    all.lp                  // Prints ~(1, 2, 3.0, 4, 5)
    
    all.letType[String].lp  // Prints ~(1, 5)
    Definition Classes
    Shared
  32. def lp: Unit

    Line print

    Line print

    Is equivalent to:

    println(this)

    For example:

    (1 to 10).all.lp  // Prints ~(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    Definition Classes
    _convert
  33. abstract def map[B](f: Mapping[A, B])(implicit arg0: Tag[B]): Flow[B]

    Element conversion

    Element conversion

    Converts every element in the pipeline with given function

    (1 to 5).all.map( _ / 2.0).lp  // Prints ~(0.5, 1.0, 1.5, 2.0, 2.5)
    Definition Classes
    _map
  34. def mapCast[B]: Flow[B]

    Element cast

    Element cast

    Casts the pipeline elements into the type specified

    def all: ~[Any] = ~~[Any] + 1 + 2 + 3
    
    all.mapCast[Int].lp   // Prints: ~(1, 2, 3)

    Note. The cast will not fail immediately, and if there is a problem, it will come up later during pumping action

    Definition Classes
    _map
  35. def max(implicit o: Ordering[A]): A

    Largest

    Largest

    Selects maximum element, based on the Ordering

    Fails for empty stream

    ~~(4, 3, 12, 7).max // Returns 12
    Definition Classes
    _aggregate
  36. def maxBy[B](f: Mapping[A, B])(implicit o: Ordering[B]): A

    Largest by property

    Largest by property

    Selects maximum element, based on mapping

    Fails for empty stream

    ~~("AA", "B", "CCCC", "DDD").maxBy(_.length) // Returns CCCC
    Definition Classes
    _aggregate
  37. def maxByOpt[B](f: Mapping[A, B])(implicit o: Ordering[B]): Opt[A]

    Largest by property option

    Largest by property option

    Selects maximum element, based on mapping

    ~~("AA", "B", "CCCC", "DDD").maxByOpt(_.length).lp // Returns Opt(CCCC)
    Definition Classes
    _aggregate
  38. def maxOpt(implicit o: Ordering[A]): Opt[A]

    Largest

    Largest

    Selects maximum element, based on the Ordering

    ~~(4, 3, 12, 7).maxOpt // Returns Opt(12)
    Definition Classes
    _aggregate
  39. def min(implicit o: Ordering[A]): A

    Smallest

    Smallest

    Selects minimal element, based on the Ordering

    Fails for empty stream

    ~~(4, 3, 12, 7).min  // Returns 3
    Definition Classes
    _aggregate
  40. def minBy[B](f: Mapping[A, B])(implicit o: Ordering[B]): A

    Smallest by property

    Smallest by property

    Selects minimal element, based on mapping

    Fails for empty stream

    ~~("AA", "B", "CCCC", "DDD").minBy(_.length) // Returns B
    Definition Classes
    _aggregate
  41. def minByOpt[B](f: Mapping[A, B])(implicit o: Ordering[B]): Opt[A]

    Smallest by property option

    Smallest by property option

    Selects minimal element, based on mapping

    ~~("AA", "B", "CCCC", "DDD").minByOpt(_.length) // Returns Opt(B)
    Definition Classes
    _aggregate
  42. def minOpt(implicit o: Ordering[A]): Opt[A]

    Smallest

    Smallest

    Selects minimal element, based on the Ordering

    ~~(4, 3, 12, 7).minOpt  // Returns Opt(3)
    Definition Classes
    _aggregate
  43. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  44. final def notify(): Unit
    Definition Classes
    AnyRef
  45. final def notifyAll(): Unit
    Definition Classes
    AnyRef
  46. abstract def peek(c: Consumer[A]): Flow[A]

    Element access

    Element access

    Provides access to passing pipeline elements

    This method does not change pipeline type or composition in any way

    ('A' to 'C').all.peek(v => println("Passing: " + v)).count  // Returns 3
    
    // Output
    Passing: A
    Passing: B
    Passing: C
    Definition Classes
    _peek
  47. def peekIdx(c: Consumer.Idx[A], start: Int = 0): Flow[A]

    Indexed element access

    Indexed element access

    Provides access to passing pipeline elements with their index in sequence

    ('A' to 'C').all.peekIdx((i, v) => println("Peek " + i + " = " + v), 1).count // Returns 3
    
    // Output
    Peek 1 = A
    Peek 2 = B
    Peek 3 = C
    start

    starting value for element indexing

    Definition Classes
    _peek
  48. def range(implicit c: Ordering[A]): Range[A]

    Element Range

    Element Range

    Selects min and max elements (according to the Ordering ), and returns result as Util.Range

    Note. Range is void for empty pipelines.

    (~~[Int] + 4 + 1 + 12 + 7).range  // Returns range from 1 to 12
    Definition Classes
    _aggregate
  49. def reduce(bf: Folding[A]): A

    Reduces elements with a Folding functions

    Reduces elements with a Folding functions

    Will fail for empty Stream

    Definition Classes
    _aggregate
  50. abstract def reduceOpt(bf: Folding[A]): Opt[A]

    Reduces elements with a Folding functions

    Reduces elements with a Folding functions

    Returns Opt.Void for for empty Stream

    Definition Classes
    _aggregate
  51. def sequential: Stream[A]

    Restore Flow to Stream

    Restore Flow to Stream

    Restores potentially parallel Flow back to Stream

    If this is already a Stream, the operation is instant, returning this

    Otherwise the operation is quite expensive

    In many cases it is advisable to consume pipeline as Flow instead of converting to Stream

    val (count, millis) = (1 to 1000).all
      .parallel                           // Switching to parallel Stream.Flow
      .peek(_ => Thread.sleep(1))         // Expensive operation
      .sequential                         // Back to Stream
      .countAndMillis
    
    println("Count = " + count + ", done in " + millis / 1000F + " secs")
    
    // Output
    Count = 1000, done in 0.224 secs
    
    // Note: We have 1000 elements each pausing for 1 millis.
    //       Without parallel processing total time would be over 1 second
    Definition Classes
    _flow
  52. abstract def sizeOpt: Opt.Int

    Size if known

    Size if known

    Stream elements count if known for granted

    sizeOpt must be trusted

    For example, if sizeOpt returns 0, processing logic should not even attempt to confirm that pipeline is empty

    Definition Classes
    _Trait
  53. def sum(implicit n: Numeric[A]): A

    Sum

    Sum

    Computes sum value of all elements

    (0 to 1000).all.sum  // Returns: 500500
    Definition Classes
    _aggregate
  54. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  55. def to[TRGT[_]](implicit cnv: Stream.Interface.To[TRGT]): TRGT[A]

    Convert to type

    Convert to type

    Converts pipeline elements to the specified target type

    Available targets are defined in Stream.Interface.To$

    • Idx
    • Idx.Immutable
    • Idx.Buffer
    • Refs
    • scala.List
    • scala.Seq
    • scala.IndexedSeq
    • scala.Iterator
    • scala.Vector
    • scala.collection.mutable.Buffer
    • java.util.Collection
    • java.util.List
    • java.util.Iterator
    • java.util.Spliterator
    • java.util.stream.Stream
    ~~("1", "2", "3").to[Idx]       // Returns: Idx[String]
    
    ('A' to 'D').all.to[List]        // Returns: scala.List[Char]
    
    (1 to 5).all.to[java.util.List]  // Returns: java.util.List[Int]

    New target conversions can be implemented by creating implicit object extending Stream.Interface.To

    Definition Classes
    _convert
  56. def toArray(implicit ct: ClassTag[A]): Array[A]

    Convert to Array

    Convert to Array

    Converts stream to array

    val a : Array[Int] =  (1 to 10).all.toArray
    Definition Classes
    _convert
  57. def toInfo: Util.Info

    Metadata as String

    Metadata as String

    val info = ('a' to 'z').all.map(_.toUpper).toInfo
    
    println(info)  // Prints scalqa.Stream.Z.extend.map.map$rawRaw$9{type=Chars,size=26}
    Definition Classes
    _Trait
  58. def toRaw[TRGT](implicit c: Stream.Interface.ToRaw[A, TRGT]): TRGT

    Convert to immutable collection

    Convert to immutable collection

    Converts pipeline to the specified immutable collection

    The types of collection and Stream must match

    Available targets are:

    (1 to 10).all.toRaw[Ints]
    
    ('A' to 'D').all.toRaw[Chars]
    Definition Classes
    _convert
  59. def toString(): String

    Elements as String

    Elements as String

    Returns String starting with ~( and containing all elements separated by comma

    (1 to 5).all.toString  //  Returns ~(1, 2, 3, 4, 5)
    Definition Classes
    _convert → AnyRef → Any
  60. def toString(name: String): String

    Elements as String

    Elements as String

    Returns String starting with given name and containing all elements separated by ", "

    (1 to 5).all.toString("My Ints")  // Returns My Ints(1, 2, 3, 4, 5)
    Definition Classes
    _convert
  61. def toText: String

    Elements as multi-line String

    Elements as multi-line String

    Returns all elements as String formatted table

    If elements implement Util.Able.ToInfo, each 'info' property value is placed in a different column

    If elements implement scala.Product (like all Tuples), each Product element is placed in a different column

    ('a' to 'e').all.map(v => (v + "1", v + "2", v + "3", v + "4", v + "5")) tp
    
    // Output
    -- -- -- -- --
    ?  ?  ?  ?  ?
    -- -- -- -- --
    a1 a2 a3 a4 a5
    b1 b2 b3 b4 b5
    c1 c2 c3 c4 c5
    d1 d2 d3 d4 d5
    e1 e2 e3 e4 e5
    -- -- -- -- --
    Definition Classes
    _convert
  62. def tp: Unit

    Text print

    Text print

    Is equivalent to:

    println(this.toText)

    For example:

    ('a' to 'd').all.zipIdx.tp
    
    // Output
    - -
    ? ?
    - -
    0 a
    1 b
    2 c
    3 d
    - -
    Definition Classes
    _convert
  63. abstract def typeOpt: Opt[Util.Specialized.Type]

    Data type if known

    Data type if known

    Stream elements type if known for granted

    Definition Classes
    _Trait
  64. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  65. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  66. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Operator

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any