class J8::Stream

Attributes

enumerator[R]

Public Class Methods

concat(stream1, stream2) click to toggle source
# File lib/j8/stream.rb, line 13
def self.concat(stream1, stream2)
  J8::Stream.new(
    Enumerator.new do |enumerator|
      [stream1, stream2].each do |stream|
        stream.enumerator.each { |o| enumerator << o }
      end
    end
  )
end
empty() click to toggle source
# File lib/j8/stream.rb, line 23
def self.empty
  [].j8_stream
end
generate(supplier = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 27
def self.generate(supplier = nil, &block)
  callable = J8::Common.from_callable_class(supplier, block, J8::Supplier)

  J8::Stream.new(
    Enumerator.new do |enumerator|
      loop { enumerator << callable.get }
    end
  )
end
iterate(seed, function = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 37
def self.iterate(seed, function = nil, &block)
  callable = J8::Common.from_callable_class(function, block, J8::Function)

  J8::Stream.new(
    Enumerator.new do |enumerator|
      loop { enumerator << callable.apply(seed) }
    end
  )
end
new(enumerator) click to toggle source
# File lib/j8/stream.rb, line 9
def initialize(enumerator)
  @enumerator = enumerator
end
of(*values) click to toggle source
# File lib/j8/stream.rb, line 47
def self.of(*values)
  values.j8_stream
end

Public Instance Methods

all_match?(predicate = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 51
def all_match?(predicate = nil, &block)
  callable = from_callable_class(predicate, block, J8::Predicate)

  # Handle Ruby's use of #all?
  # [].all? { |n| n == true } => true
  ran = false

  ret = @enumerator.all? do |o|
    ran = true
    callable.test(o) == true
  end

  ran ? ret : false
end
any_match?(predicate = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 66
def any_match?(predicate = nil, &block)
  callable = from_callable_class(predicate, block, J8::Predicate)

  @enumerator.any? { |o| callable.test(o) }
end
collect() click to toggle source
# File lib/j8/stream.rb, line 72
def collect
  # figure it out
end
count() click to toggle source
# File lib/j8/stream.rb, line 76
def count
  @enumerator.count
end
each(consumer = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 97
def each(consumer = nil, &block)
  callable = from_callable_class(consumer, block, J8::Consumer)

  @enumerator.each { |n| callable.accept(n) }
end
filter(predicate = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 80
def filter(predicate = nil, &block)
  callable = from_callable_class(predicate, block, J8::Predicate)

  @enumerator.select { |n| callable.test(n) }.j8_stream
end
find_any()
Alias for: find_first
find_first() click to toggle source
# File lib/j8/stream.rb, line 86
def find_first
  J8::Optional.new(@enumerator.first)
end
Also aliased as: find_any
flat_map(function = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 91
def flat_map(function = nil, &block)
  callable = from_callable_class(function, block, J8::Function)

  @enumerator.map { |n| callable.apply(n) }.flatten.j8_stream
end
limit(size) click to toggle source
# File lib/j8/stream.rb, line 103
def limit(size)
  @enumerator.first(size).j8_stream
end
map(function = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 107
def map(function = nil, &block)
  callable = from_callable_class(function, block, J8::Function)

  @enumerator.map { |object| callable.apply(object) }.j8_stream
end
max(comparator = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 113
def max(comparator = nil, &block)
  callable = from_callable_class(comparator, block, J8::Comparator)

  @enumerator.max { |a, b| callable.compare(a, b) }
end
min(comparator = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 119
def min(comparator = nil, &block)
  callable = from_callable_class(comparator, block, J8::Comparator)

  @enumerator.min { |a, b| callable.compare(a, b) }
end
none_match?(predicate = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 125
def none_match?(predicate = nil, &block)
  callable = from_callable_class(predicate, block, J8::Predicate)

  # Handle Ruby's use of #all?
  # [].all? { |n| n == true } => true
  ran = false

  ret = @enumerator.all? do |object|
    ran = true
    callable.test(object) != true
  end

  ran ? ret : false
end
peek(consumer = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 140
def peek(consumer = nil, &block)
  callable = from_callable_class(consumer, block, J8::Consumer)

  @enumerator.entries.tap do |entries|
    entries.each { |v| callable.accept(v) }
    @enumerator.rewind
  end.j8_stream
end
reduce(binary_operator = nil, memo: nil, &block) click to toggle source
# File lib/j8/stream.rb, line 149
def reduce(binary_operator = nil, memo: nil, &block)
  callable = from_callable_class(binary_operator, block, J8::BinaryOperator)

  J8::Optional.of(
    @enumerator.reduce(memo) do |accumulator, object|
      callable.apply(accumulator, object)
    end
  )
end
skip(amount) click to toggle source
# File lib/j8/stream.rb, line 159
def skip(amount)
  @enumerator.slice_after(amount).to_a.last.j8_stream
end
sort() click to toggle source
# File lib/j8/stream.rb, line 163
def sort
  @enumerator.sort.j8_stream
end
sort_by(comparator = nil, &block) click to toggle source
# File lib/j8/stream.rb, line 167
def sort_by(comparator = nil, &block)
  callable = from_callable_class(comparator, block, J8::Comparator)

  @enumerator.sort { |a, b| callable.compare(a, b) }.j8_stream
end
to_a() click to toggle source
# File lib/j8/stream.rb, line 173
def to_a
  @enumerator.to_a
end