public function collect(Collector $collector) : Stream { $gen = $this->execute(); $supplied = $collector->supplier()->get(); while ($gen->valid()) { $supplied = $collector->accumulator()->apply($supplied, $gen->next()); $gen->next(); } return $collector->finisher()->apply($supplied); }