/**
  * @param array|Traversable $array
  *
  * @throws \InvalidArgumentException
  */
 function __construct($array = null)
 {
     parent::__construct();
     if ($array === null) {
         $this->array = array();
     } else {
         if (is_array($array)) {
             $this->array = array_values($array);
         } else {
             if ($array instanceof Traversable) {
                 $this->array = iterator_to_array($array, false);
             } else {
                 throw new InvalidArgumentException('You must give an array or a Traversable');
             }
         }
     }
 }
 /**
  * @param string|string[] $string
  *
  * @throws \InvalidArgumentException
  */
 function __construct($string = null)
 {
     parent::__construct();
     if (is_array($string)) {
         $this->string = implode($string);
     } else {
         if ($string instanceof Stringer) {
             $this->string = $string->string;
         } else {
             if (is_string($string)) {
                 $this->string = $string;
             } else {
                 if ($string === null) {
                     $this->string = '';
                 } else {
                     throw new InvalidArgumentException('You must give a string or a char array');
                 }
             }
         }
     }
 }
 /**
  * @inheritdoc
  */
 protected function resolveFunction($function)
 {
     if ($function === null) {
         return function (KeyValuePair $item) {
             return $item->getValue();
         };
     }
     return parent::resolveFunction($function);
 }