          * -------------------------------------------
          */
 
-
+        /**
+         * Converts the elements in an array to strings,
+         * inserts the specified separator between the elements,
+         * concatenates them, and returns the resulting string.
+         * @param sep used as separator
+         * @return A string consisting of the elements of an array converted to strings
+         * and separated by the specified parameter.
+         */
         public function join(sep:* = null):String
         {
             return source.join(sep);

            return new Stream().concat(mapped);
        }

        public function get collection():ArrayCollection
        {
            return new ArrayCollection(source.concat());
        }

        public function get array():Array
        {
            return source.concat();
        }

        public function get list():ArrayList
        {
            return new ArrayList(this.source.concat());
        }

        public function dictionary(name:String, weak:Boolean = false):Dictionary
        {
            var dict:Dictionary = new Dictionary(weak);
            for each (var item:* in source)
            {
                var value:* = item[name];
                dict[value] = item;
            }
            return dict;
        }


        public function object(name:String):Object
        {
            var dict:Object = {};
            for each (var item:* in source)
            {
                var value:* = item[name];
                dict[value] = item;
            }
            return dict;
        }

        public function clone(deep:Boolean = false):Stream
        {
            if (deep)

         * -------------------------------------------
         */

        /**
         * Returns <b>true</b> if Stream does not contain any elements,
         * else returns <b>false</b>.
         */
        public function get empty():Boolean
        {
            return length == 0;
        }

        /**
         * Creates new Stream that contains items starting from count index.
         * @param count number of items to skip
         * @return new Stream that contains items starting from count index.
         */
        public function skip(count:int):Stream
        {
            return this.slice(count);
        }

        /**
         * Returns last item in Stream
         * Equivalent to expression: stream[stream.length - 1]
         */
        public function get last():*
        {
            return source.length > 0 ? source[source.length - 1] : null;
        }

        /**
         * Returns first item in Stream
         * Equivalent to expression: stream[0]
         */
        public function get first():*
        {
            return source.length > 0 ? source[0] : null;
