CollectionDecorator   F
last analyzed

Complexity

Total Complexity 134

Size/Duplication

Total Lines 707
Duplicated Lines 0 %

Test Coverage

Coverage 96.64%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
eloc 137
dl 0
loc 707
ccs 259
cts 268
cp 0.9664
rs 2
c 2
b 0
f 2
wmc 134

134 Methods

Rating   Name   Duplication   Size   Complexity  
A diffKeys() 0 3 1
A cache() 0 3 1
A current() 0 3 1
A compare() 0 3 1
A coalesce() 0 3 1
A append() 0 3 1
A all() 0 3 1
A apply() 0 3 1
A compact() 0 3 1
A combinate() 0 3 1
A combine() 0 3 1
A chunk() 0 3 1
A diff() 0 3 1
A collapse() 0 3 1
A contains() 0 3 1
A averages() 0 3 1
A cycle() 0 3 1
A column() 0 3 1
A countIn() 0 5 1
A associate() 0 5 1
A asyncMap() 0 3 1
A asyncMapN() 0 3 1
A empty() 0 3 1
A drop() 0 3 1
A distinct() 0 3 1
A dump() 0 3 1
A duplicate() 0 3 1
A dropWhile() 0 3 1
A equals() 0 3 1
A scanRight1() 0 3 1
A tail() 0 3 1
A rsample() 0 3 1
A reject() 0 3 1
A explode() 0 3 1
A strict() 0 3 1
A fromFile() 0 3 1
A slice() 0 3 1
A scale() 0 8 1
A pipe() 0 3 1
A get() 0 3 1
A fromResource() 0 3 1
A every() 0 3 1
A takeWhile() 0 3 1
A split() 0 3 1
A group() 0 3 1
A intersectKeys() 0 3 1
A filter() 0 3 1
A intersect() 0 3 1
A keys() 0 3 1
A matching() 0 3 1
A shuffle() 0 3 1
A range() 0 3 1
A reverse() 0 3 1
A sort() 0 3 1
A map() 0 3 1
A init() 0 3 1
A intersperse() 0 3 1
A reduction() 0 3 1
A squash() 0 3 1
A foldLeft() 0 3 1
A flip() 0 3 1
A permutate() 0 3 1
A tails() 0 3 1
A foldLeft1() 0 3 1
A find() 0 3 1
A groupBy() 0 3 1
A ifThenElse() 0 3 1
A falsy() 0 3 1
A dispersion() 0 3 1
A normalize() 0 3 1
A key() 0 3 1
A flatMap() 0 3 1
A limit() 0 3 1
A pack() 0 3 1
A min() 0 3 1
A pair() 0 3 1
A lines() 0 3 1
A flatten() 0 3 1
A head() 0 3 1
A fromString() 0 3 1
A fromCallable() 0 3 1
A match() 0 3 1
A random() 0 3 1
A prepend() 0 3 1
A product() 0 3 1
A has() 0 3 1
A frequency() 0 3 1
A same() 0 3 1
A pad() 0 3 1
A reduce() 0 3 1
A nth() 0 3 1
A inits() 0 3 1
A foldRight1() 0 3 1
A scanLeft1() 0 3 1
A partition() 0 3 1
A span() 0 3 1
A last() 0 3 1
A since() 0 3 1
A scanLeft() 0 3 1
A fromIterable() 0 3 1
A isEmpty() 0 3 1
A first() 0 3 1
A merge() 0 3 1
A implode() 0 3 1
A foldRight() 0 3 1
A max() 0 3 1
A fromGenerator() 0 3 1
A pluck() 0 3 1
A getIterator() 0 3 1
A nullsy() 0 3 1
A scanRight() 0 3 1
A mapN() 0 3 1
A forget() 0 3 1
A entropy() 0 3 1
A isNotEmpty() 0 3 1
A __construct() 0 1 1
A wrap() 0 3 1
A unfold() 0 3 1
A unpair() 0 3 1
A until() 0 3 1
A unzip() 0 3 1
A when() 0 3 1
A window() 0 3 1
A truthy() 0 3 1
A tap() 0 3 1
A times() 0 3 1
A unwindow() 0 3 1
A unpack() 0 3 1
A unwords() 0 3 1
A words() 0 3 1
A unlines() 0 3 1
A unwrap() 0 3 1
A transpose() 0 3 1
A zip() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like CollectionDecorator often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use CollectionDecorator, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
declare(strict_types=1);
4
5
namespace loophp\collection;
6
7
use Closure;
8
use Doctrine\Common\Collections\Criteria;
9
use Generator;
10
use loophp\collection\Contract\Collection as CollectionInterface;
11
use loophp\collection\Contract\Operation;
12
use Psr\Cache\CacheItemPoolInterface;
13
use Traversable;
14
15
use const INF;
16
use const PHP_INT_MAX;
17
18
/**
19
 * @template TKey
20
 * @template T
21
 *
22
 * @immutable
23
 *
24
 * @psalm-consistent-constructor
25
 *
26
 * @psalm-consistent-templates
27
 *
28
 * @implements \loophp\collection\Contract\Collection<TKey, T>
29
 */
30
abstract class CollectionDecorator implements CollectionInterface
31
{
32
    /**
33
     * @param CollectionInterface<TKey, T> $innerCollection
34
     */
35 349
    public function __construct(protected CollectionInterface $innerCollection) {}
36
37 5
    public function all(bool $normalize = true): array
38
    {
39 5
        return $this->innerCollection->all($normalize);
40
    }
41
42 1
    public function append(mixed ...$items): static
43
    {
44 1
        return new static($this->innerCollection->append(...$items));
45
    }
46
47 3
    public function apply(callable ...$callbacks): static
48
    {
49 3
        return new static($this->innerCollection->apply(...$callbacks));
50
    }
51
52 2
    public function associate(
53
        ?callable $callbackForKeys = null,
54
        ?callable $callbackForValues = null
55
    ): static {
56 2
        return new static($this->innerCollection->associate($callbackForKeys, $callbackForValues));
57
    }
58
59 1
    public function asyncMap(callable $callback): static
60
    {
61 1
        return new static($this->innerCollection->asyncMap($callback));
62
    }
63
64 1
    public function asyncMapN(callable ...$callbacks): static
65
    {
66 1
        return new static($this->innerCollection->asyncMapN(...$callbacks));
67
    }
68
69 2
    public function averages(): static
70
    {
71 2
        return new static($this->innerCollection->averages());
72
    }
73
74 1
    public function cache(?CacheItemPoolInterface $cache = null): static
75
    {
76 1
        return new static($this->innerCollection->cache($cache));
77
    }
78
79 4
    public function chunk(int ...$sizes): static
80
    {
81 4
        return new static($this->innerCollection->chunk(...$sizes));
82
    }
83
84 2
    public function coalesce(): static
85
    {
86 2
        return new static($this->innerCollection->coalesce());
87
    }
88
89 2
    public function collapse(): static
90
    {
91 2
        return new static($this->innerCollection->collapse());
92
    }
93
94 3
    public function column(mixed $column): static
95
    {
96 3
        return new static($this->innerCollection->column($column));
97
    }
98
99 3
    public function combinate(?int $length = null): static
100
    {
101 3
        return new static($this->innerCollection->combinate($length));
102
    }
103
104 3
    public function combine(mixed ...$keys): static
105
    {
106 3
        return new static($this->innerCollection->combine(...$keys));
107
    }
108
109 2
    public function compact(mixed ...$values): static
110
    {
111 2
        return new static($this->innerCollection->compact(...$values));
112
    }
113
114 5
    public function compare(callable $comparator, $default = null): mixed
115
    {
116 5
        return $this->innerCollection->compare($comparator, $default);
117
    }
118
119 5
    public function contains(mixed ...$values): bool
120
    {
121 5
        return $this->innerCollection->contains(...$values);
122
    }
123
124
    public function countIn(int &$counter): CollectionInterface
125
    {
126
        $this->innerCollection->countIn($counter);
127
128
        return $this;
129
    }
130
131 3
    public function current(int $index = 0, $default = null): mixed
132
    {
133 3
        return $this->innerCollection->current($index, $default);
134
    }
135
136 1
    public function cycle(): static
137
    {
138 1
        return new static($this->innerCollection->cycle());
139
    }
140
141 7
    public function diff(mixed ...$values): static
142
    {
143 7
        return new static($this->innerCollection->diff(...$values));
144
    }
145
146 2
    public function diffKeys(mixed ...$keys): static
147
    {
148 2
        return new static($this->innerCollection->diffKeys(...$keys));
149
    }
150
151
    public function dispersion(): static
152
    {
153
        return new static($this->innerCollection->dispersion());
154
    }
155
156 6
    public function distinct(?callable $comparatorCallback = null, ?callable $accessorCallback = null): static
157
    {
158 6
        return new static($this->innerCollection->distinct($comparatorCallback, $accessorCallback));
159
    }
160
161 2
    public function drop(int $count): static
162
    {
163 2
        return new static($this->innerCollection->drop($count));
164
    }
165
166 2
    public function dropWhile(callable ...$callbacks): static
167
    {
168 2
        return new static($this->innerCollection->dropWhile(...$callbacks));
169
    }
170
171 2
    public function dump(string $name = '', int $size = 1, ?Closure $closure = null): static
172
    {
173 2
        return new static($this->innerCollection->dump($name, $size, $closure));
174
    }
175
176 5
    public function duplicate(?callable $comparatorCallback = null, ?callable $accessorCallback = null): static
177
    {
178 5
        return new static($this->innerCollection->duplicate($comparatorCallback, $accessorCallback));
179
    }
180
181 1
    public static function empty(): static
182
    {
183 1
        return new static(Collection::empty());
184
    }
185
186
    public function entropy(): static
187
    {
188
        return new static($this->innerCollection->entropy());
189
    }
190
191 18
    public function equals(iterable $other): bool
192
    {
193 18
        return $this->innerCollection->equals($other);
194
    }
195
196 8
    public function every(callable ...$callbacks): bool
197
    {
198 8
        return $this->innerCollection->every(...$callbacks);
199
    }
200
201 1
    public function explode(mixed ...$explodes): static
202
    {
203 1
        return new static($this->innerCollection->explode(...$explodes));
204
    }
205
206 4
    public function falsy(): bool
207
    {
208 4
        return $this->innerCollection->falsy();
209
    }
210
211 4
    public function filter(callable ...$callbacks): static
212
    {
213 4
        return new static($this->innerCollection->filter(...$callbacks));
214
    }
215
216 5
    public function find($default = null, callable ...$callbacks): mixed
217
    {
218 5
        return $this->innerCollection->find($default, ...$callbacks);
219
    }
220
221 5
    public function first($default = null): mixed
222
    {
223 5
        return $this->innerCollection->first($default);
224
    }
225
226 7
    public function flatMap(callable $callback): static
227
    {
228 7
        return new static($this->innerCollection->flatMap($callback));
229
    }
230
231 3
    public function flatten(int $depth = PHP_INT_MAX): static
232
    {
233 3
        return new static($this->innerCollection->flatten($depth));
234
    }
235
236 2
    public function flip(): static
237
    {
238 2
        return new static($this->innerCollection->flip());
239
    }
240
241 4
    public function foldLeft(callable $callback, $initial): mixed
242
    {
243 4
        return $this->innerCollection->foldLeft($callback, $initial);
244
    }
245
246 2
    public function foldLeft1(callable $callback): mixed
247
    {
248 2
        return $this->innerCollection->foldLeft1($callback);
249
    }
250
251 1
    public function foldRight(callable $callback, $initial): mixed
252
    {
253 1
        return $this->innerCollection->foldRight($callback, $initial);
254
    }
255
256 2
    public function foldRight1(callable $callback): mixed
257
    {
258 2
        return $this->innerCollection->foldRight1($callback);
259
    }
260
261 1
    public function forget(mixed ...$keys): static
262
    {
263 1
        return new static($this->innerCollection->forget(...$keys));
264
    }
265
266 1
    public function frequency(): static
267
    {
268 1
        return new static($this->innerCollection->frequency());
269
    }
270
271
    /**
272
     * @template UKey
273
     * @template U
274
     *
275
     * @param callable(mixed ...$parameters): iterable<UKey, U> $callable
276
     * @param iterable<int, mixed> $parameters
277
     *
278
     * @return static<UKey, U>
279
     */
280 1
    public static function fromCallable(callable $callable, iterable $parameters = []): static
281
    {
282 1
        return new static(Collection::fromCallable($callable, $parameters));
283
    }
284
285
    /**
286
     * @param Closure(resource): mixed $consumer
287
     */
288 1
    public static function fromFile(string $filepath, ?Closure $consumer = null): static
289
    {
290 1
        return new static(Collection::fromFile($filepath, $consumer));
291
    }
292
293 1
    public static function fromGenerator(Generator $generator): static
294
    {
295 1
        return new static(Collection::fromGenerator($generator));
296
    }
297
298
    /**
299
     * @template UKey
300
     * @template U
301
     *
302
     * @param iterable<UKey, U> $iterable
303
     *
304
     * @return static<UKey, U>
305
     */
306 1
    public static function fromIterable(iterable $iterable): static
307
    {
308 1
        return new static(Collection::fromIterable($iterable));
309
    }
310
311
    /**
312
     * @param resource $resource
313
     *
314
     * @return static<int, string>
315
     */
316 1
    public static function fromResource($resource): static
317
    {
318 1
        return new static(Collection::fromResource($resource));
319
    }
320
321 1
    public static function fromString(string $string, string $delimiter = ''): static
322
    {
323 1
        return new static(Collection::fromString($string, $delimiter));
324
    }
325
326 2
    public function get(mixed $key, $default = null): mixed
327
    {
328 2
        return $this->innerCollection->get($key, $default);
329
    }
330
331
    /**
332
     * @return Traversable<TKey, T>
333
     */
334 202
    public function getIterator(): Traversable
335
    {
336 202
        yield from $this->innerCollection->getIterator();
337
    }
338
339 3
    public function group(): static
340
    {
341 3
        return new static($this->innerCollection->group());
342
    }
343
344 2
    public function groupBy(callable $callback): static
345
    {
346 2
        return new static($this->innerCollection->groupBy($callback));
347
    }
348
349 8
    public function has(callable ...$callbacks): bool
350
    {
351 8
        return $this->innerCollection->has(...$callbacks);
352
    }
353
354 3
    public function head($default = null): mixed
355
    {
356 3
        return $this->innerCollection->head($default);
357
    }
358
359 2
    public function ifThenElse(callable $condition, callable $then, ?callable $else = null): static
360
    {
361 2
        return new static($this->innerCollection->ifThenElse($condition, $then, $else));
362
    }
363
364 3
    public function implode(string $glue = ''): string
365
    {
366 3
        return $this->innerCollection->implode($glue);
367
    }
368
369 2
    public function init(): static
370
    {
371 2
        return new static($this->innerCollection->init());
372
    }
373
374 2
    public function inits(): static
375
    {
376 2
        return new static($this->innerCollection->inits());
377
    }
378
379 2
    public function intersect(mixed ...$values): static
380
    {
381 2
        return new static($this->innerCollection->intersect(...$values));
382
    }
383
384 3
    public function intersectKeys(mixed ...$keys): static
385
    {
386 3
        return new static($this->innerCollection->intersectKeys(...$keys));
387
    }
388
389 5
    public function intersperse(mixed $element, int $every = 1, int $startAt = 0): static
390
    {
391 5
        return new static($this->innerCollection->intersperse($element, $every, $startAt));
392
    }
393
394 7
    public function isEmpty(): bool
395
    {
396 7
        return $this->innerCollection->isEmpty();
397
    }
398
399 7
    public function isNotEmpty(): bool
400
    {
401 7
        return $this->innerCollection->isNotEmpty();
402
    }
403
404 3
    public function key(int $index = 0): mixed
405
    {
406 3
        return $this->innerCollection->key($index);
407
    }
408
409 1
    public function keys(): static
410
    {
411 1
        return new static($this->innerCollection->keys());
412
    }
413
414 7
    public function last($default = null): mixed
415
    {
416 7
        return $this->innerCollection->last($default);
417
    }
418
419 5
    public function limit(int $count = -1, int $offset = 0): static
420
    {
421 5
        return new static($this->innerCollection->limit($count, $offset));
422
    }
423
424 1
    public function lines(): static
425
    {
426 1
        return new static($this->innerCollection->lines());
427
    }
428
429 2
    public function map(callable $callback): static
430
    {
431 2
        return new static($this->innerCollection->map($callback));
432
    }
433
434 2
    public function mapN(callable ...$callbacks): static
435
    {
436 2
        return new static($this->innerCollection->mapN(...$callbacks));
437
    }
438
439 3
    public function match(callable $callback, ?callable $matcher = null): bool
440
    {
441 3
        return $this->innerCollection->match($callback, $matcher);
442
    }
443
444 1
    public function matching(Criteria $criteria): static
445
    {
446 1
        return new static($this->innerCollection->matching($criteria));
447
    }
448
449 4
    public function max($default = null): mixed
450
    {
451 4
        return $this->innerCollection->max($default);
452
    }
453
454 1
    public function merge(iterable ...$sources): static
455
    {
456 1
        return new static($this->innerCollection->merge(...$sources));
457
    }
458
459 4
    public function min($default = null): mixed
460
    {
461 4
        return $this->innerCollection->min($default);
462
    }
463
464 3
    public function normalize(): static
465
    {
466 3
        return new static($this->innerCollection->normalize());
467
    }
468
469 2
    public function nth(int $step, int $offset = 0): static
470
    {
471 2
        return new static($this->innerCollection->nth($step, $offset));
472
    }
473
474 4
    public function nullsy(): bool
475
    {
476 4
        return $this->innerCollection->nullsy();
477
    }
478
479 1
    public function pack(): static
480
    {
481 1
        return new static($this->innerCollection->pack());
482
    }
483
484 1
    public function pad(int $size, mixed $value): static
485
    {
486 1
        return new static($this->innerCollection->pad($size, $value));
487
    }
488
489 3
    public function pair(): static
490
    {
491 3
        return new static($this->innerCollection->pair());
492
    }
493
494 1
    public function partition(callable ...$callbacks): static
495
    {
496 1
        return new static($this->innerCollection->partition(...$callbacks));
497
    }
498
499 1
    public function permutate(): static
500
    {
501 1
        return new static($this->innerCollection->permutate());
502
    }
503
504 1
    public function pipe(callable ...$callbacks): static
505
    {
506 1
        return new static($this->innerCollection->pipe(...$callbacks));
507
    }
508
509 6
    public function pluck(mixed $pluck, mixed $default = null): static
510
    {
511 6
        return new static($this->innerCollection->pluck($pluck, $default));
512
    }
513
514 1
    public function prepend(mixed ...$items): static
515
    {
516 1
        return new static($this->innerCollection->prepend(...$items));
517
    }
518
519 2
    public function product(iterable ...$iterables): static
520
    {
521 2
        return new static($this->innerCollection->product(...$iterables));
522
    }
523
524 1
    public function random(int $size = 1, ?int $seed = null): static
525
    {
526 1
        return new static($this->innerCollection->random($size, $seed));
527
    }
528
529 1
    public static function range(float $start = 0.0, float $end = INF, float $step = 1.0): CollectionInterface
530
    {
531 1
        return new static(Collection::range($start, $end, $step));
532
    }
533
534 3
    public function reduce(callable $callback, mixed $initial = null): mixed
535
    {
536 3
        return $this->innerCollection->reduce($callback, $initial);
537
    }
538
539 1
    public function reduction(callable $callback, mixed $initial = null): static
540
    {
541 1
        return new static($this->innerCollection->reduction($callback, $initial));
542
    }
543
544 4
    public function reject(callable ...$callbacks): static
545
    {
546 4
        return new static($this->innerCollection->reject(...$callbacks));
547
    }
548
549 2
    public function reverse(): static
550
    {
551 2
        return new static($this->innerCollection->reverse());
552
    }
553
554
    public function rsample(float $probability): static
555
    {
556
        return new static($this->innerCollection->rsample($probability));
557
    }
558
559 23
    public function same(iterable $other, ?callable $comparatorCallback = null): bool
560
    {
561 23
        return $this->innerCollection->same($other, $comparatorCallback);
562
    }
563
564 1
    public function scale(
565
        float $lowerBound,
566
        float $upperBound,
567
        float $wantedLowerBound = 0.0,
568
        float $wantedUpperBound = 1.0,
569
        float $base = 0.0
570
    ): static {
571 1
        return new static($this->innerCollection->scale($lowerBound, $upperBound, $wantedLowerBound, $wantedUpperBound));
572
    }
573
574 2
    public function scanLeft(callable $callback, mixed $initial): static
575
    {
576 2
        return new static($this->innerCollection->scanLeft($callback, $initial));
577
    }
578
579 3
    public function scanLeft1(callable $callback): static
580
    {
581 3
        return new static($this->innerCollection->scanLeft1($callback));
582
    }
583
584 2
    public function scanRight(callable $callback, mixed $initial): static
585
    {
586 2
        return new static($this->innerCollection->scanRight($callback, $initial));
587
    }
588
589 2
    public function scanRight1(callable $callback): static
590
    {
591 2
        return new static($this->innerCollection->scanRight1($callback));
592
    }
593
594 1
    public function shuffle(?int $seed = null): static
595
    {
596 1
        return new static($this->innerCollection->shuffle($seed));
597
    }
598
599 4
    public function since(callable ...$callbacks): static
600
    {
601 4
        return new static($this->innerCollection->since(...$callbacks));
602
    }
603
604 3
    public function slice(int $offset, int $length = -1): static
605
    {
606 3
        return new static($this->innerCollection->slice($offset, $length));
607
    }
608
609 5
    public function sort(int $type = Operation\Sortable::BY_VALUES, null|callable|Closure $callback = null): static
610
    {
611 5
        return new static($this->innerCollection->sort($type, $callback));
612
    }
613
614 1
    public function span(callable ...$callbacks): static
615
    {
616 1
        return new static($this->innerCollection->span(...$callbacks));
617
    }
618
619 3
    public function split(int $type = Operation\Splitable::BEFORE, callable ...$callbacks): static
620
    {
621 3
        return new static($this->innerCollection->split($type, ...$callbacks));
622
    }
623
624 1
    public function squash(): static
625
    {
626 1
        return new static($this->innerCollection->squash());
627
    }
628
629 1
    public function strict(?callable $callback = null): static
630
    {
631 1
        return new static($this->innerCollection->strict($callback));
632
    }
633
634 1
    public function tail(): static
635
    {
636 1
        return new static($this->innerCollection->tail());
637
    }
638
639 2
    public function tails(): static
640
    {
641 2
        return new static($this->innerCollection->tails());
642
    }
643
644 3
    public function takeWhile(callable ...$callbacks): static
645
    {
646 3
        return new static($this->innerCollection->takeWhile(...$callbacks));
647
    }
648
649 1
    public function tap(callable ...$callbacks): static
650
    {
651 1
        return new static($this->innerCollection->tap(...$callbacks));
652
    }
653
654 1
    public static function times(int $number = 0, ?callable $callback = null): static
655
    {
656 1
        return new static(Collection::times($number, $callback));
657
    }
658
659 1
    public function transpose(): static
660
    {
661 1
        return new static($this->innerCollection->transpose());
662
    }
663
664 4
    public function truthy(): bool
665
    {
666 4
        return $this->innerCollection->truthy();
667
    }
668
669 1
    public static function unfold(callable $callback, iterable $parameters = []): static
670
    {
671 1
        return new static(Collection::unfold($callback, $parameters));
672
    }
673
674 1
    public function unlines(): string
675
    {
676 1
        return $this->innerCollection->unlines();
677
    }
678
679 1
    public function unpack(): static
680
    {
681 1
        return new static($this->innerCollection->unpack());
682
    }
683
684 1
    public function unpair(): static
685
    {
686 1
        return new static($this->innerCollection->unpair());
687
    }
688
689 2
    public function until(callable ...$callbacks): static
690
    {
691 2
        return new static($this->innerCollection->until(...$callbacks));
692
    }
693
694 1
    public function unwindow(): static
695
    {
696 1
        return new static($this->innerCollection->unwindow());
697
    }
698
699 1
    public function unwords(): string
700
    {
701 1
        return $this->innerCollection->unwords();
702
    }
703
704 3
    public function unwrap(): static
705
    {
706 3
        return new static($this->innerCollection->unwrap());
707
    }
708
709 1
    public function unzip(): static
710
    {
711 1
        return new static($this->innerCollection->unzip());
712
    }
713
714 2
    public function when(callable $predicate, callable $whenTrue, ?callable $whenFalse = null): static
715
    {
716 2
        return new static($this->innerCollection->when($predicate, $whenTrue, $whenFalse));
717
    }
718
719 4
    public function window(int $size): static
720
    {
721 4
        return new static($this->innerCollection->window($size));
722
    }
723
724 1
    public function words(): static
725
    {
726 1
        return new static($this->innerCollection->words());
727
    }
728
729 2
    public function wrap(): static
730
    {
731 2
        return new static($this->innerCollection->wrap());
732
    }
733
734 2
    public function zip(iterable ...$iterables): static
735
    {
736 2
        return new static($this->innerCollection->zip(...$iterables));
737
    }
738
}
739