diff --git a/src/Collection/ArrayList.php b/src/Collection/ArrayList.php index bfc6a1f..58b2ed5 100644 --- a/src/Collection/ArrayList.php +++ b/src/Collection/ArrayList.php @@ -83,17 +83,23 @@ final public function toArray(): array // NOTE: IArrayListFactory // ------------------------------------------------------------------------- #[Override] - final public static function from(array $elements): static + final public static function from(iterable $elements): static { - return new static($elements); + if (is_array($elements)) { + return new static($elements); + } + + return new static(iterator_to_array($elements)); } #[Override] - final public static function tryFrom(array $elements): Result + final public static function tryFrom(iterable $elements): Result { + $elements = is_array($elements) ? $elements : iterator_to_array($elements); + return static::isValid($elements) ->andThen(static fn () => static::isValidCount($elements)) - ->andThen(static fn () => Result\ok(static::from($elements))); + ->andThen(static fn () => Result\ok(new static($elements))); } #[Override] diff --git a/src/Collection/List/IArrayListFactory.php b/src/Collection/List/IArrayListFactory.php index 3dcf5ec..ac5d46d 100644 --- a/src/Collection/List/IArrayListFactory.php +++ b/src/Collection/List/IArrayListFactory.php @@ -20,20 +20,20 @@ interface IArrayListFactory * * @template TFromValue of TValue * - * @param array $elements + * @param iterable $elements * @return static */ - public static function from(array $elements): static; + public static function from(iterable $elements): static; /** * 信頼できないプリミティブ値からインスタンスを生成する * * @template TTryFromValue of TValue * - * @param array $elements + * @param iterable $elements * @return Result,ValueObjectError> */ - public static function tryFrom(array $elements): Result; + public static function tryFrom(iterable $elements): Result; /** * 空のコレクションを作成する