From 8b1dd2721841f14106603f1cfc2055f4a0a2dc75 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Fri, 21 Aug 2020 15:34:02 +0200 Subject: [PATCH] Update Map operation. --- src/Operation/Map.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Operation/Map.php b/src/Operation/Map.php index ef4fc15d0..5380656de 100644 --- a/src/Operation/Map.php +++ b/src/Operation/Map.php @@ -4,10 +4,13 @@ namespace loophp\collection\Operation; +use ArrayIterator; use Closure; use Generator; use Iterator; use loophp\collection\Contract\Operation; +use loophp\collection\Transformation\FoldLeft; +use loophp\collection\Transformation\Transform; /** * @psalm-template TKey @@ -18,7 +21,7 @@ final class Map extends AbstractOperation implements Operation { public function __construct(callable ...$callbacks) { - $this->storage['callbacks'] = $callbacks; + $this->storage['callbacks'] = new ArrayIterator($callbacks); } public function __invoke(): Closure @@ -30,14 +33,13 @@ public function __invoke(): Closure * * @psalm-return \Generator */ - static function (Iterator $iterator, array $callbacks): Generator { + static function (Iterator $iterator, ArrayIterator $callbacks): Generator { foreach ($iterator as $key => $value) { - // Custom array_reduce function with the key passed in argument. - foreach ($callbacks as $callback) { - $value = $callback($value, $key); - } + $callback = static function ($carry, callable $callback) use ($value, $key) { + return $callback($value, $key); + }; - yield $key => $value; + yield $key => (new Transform(new FoldLeft($callback, $value)))($callbacks); } }; }