From 26859a8c46ccaa0a55fc8b00047989530b642a37 Mon Sep 17 00:00:00 2001 From: alexander Date: Fri, 4 Dec 2015 01:54:21 +0300 Subject: [PATCH] zip and zipWithIndex --- source/com/kemsky/Stream.as | 28 ++++++++++++++++++++++++++-- testSrc/com/kemsky/TestStream.as | 26 +++++++++++++++++++++----- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/source/com/kemsky/Stream.as b/source/com/kemsky/Stream.as index 4266872..b43e7b9 100644 --- a/source/com/kemsky/Stream.as +++ b/source/com/kemsky/Stream.as @@ -284,13 +284,37 @@ package com.kemsky * @return A new list of lists created from the items and their corresponding indices. * @internal immutable */ - public function zip():Stream + public function zipWithIndex():Stream { var result:Array = []; result.length = source.length; for(var i:int = 0; i < source.length; i++) { - result[i] = new Stream([i, source[i]]); + result[i] = new Stream([source[i], i]); + } + return new Stream(result); + } + + /** + * Creates a new list of lists created from the items and their corresponding items from another stream. + * @example + *
+         *     var s1:Stream = $(1, 2, 3);
+         *     var s2:Stream = $(1, 2, 3);
+         *     var z:Stream = s1.zip(s2);
+         *     trace(z);
+         *     //Stream{Stream{1, 1}, Stream{2, 2}, Stream{3, 3}}
+         * 
+ * @return A new list of lists created from the items and their corresponding items from another strea. + * @internal immutable + */ + public function zip(stream:Stream):Stream + { + var result:Array = []; + var size:uint = Math.min(length, stream.length); + for(var i:int = 0; i < size; i++) + { + result[i] = Stream.of(getItem(i), stream.getItem(i)); } return new Stream(result); } diff --git a/testSrc/com/kemsky/TestStream.as b/testSrc/com/kemsky/TestStream.as index 2623265..641895a 100644 --- a/testSrc/com/kemsky/TestStream.as +++ b/testSrc/com/kemsky/TestStream.as @@ -248,17 +248,33 @@ package com.kemsky [Test] public function testZip():void + { + var s1:Stream = $("1", "2"); + var s2:Stream = $(1, 2); + var e:Stream = s1.zip(s2); + assertEquals(e.length, s1.length); + assertTrue(e.first is Stream); + assertTrue(e.second is Stream); + assertEquals(e.first.length, 2); + assertEquals(e.first.second, 1); + assertEquals(e.first.first, "1"); + assertEquals(e.second.second, 2); + assertEquals(e.second.first, "2"); + } + + [Test] + public function testZipWithIndex():void { var s:Stream = $("1", "2"); - var e:Stream = s.zip(); + var e:Stream = s.zipWithIndex(); assertEquals(e.length, s.length); assertTrue(e.first is Stream); assertTrue(e.second is Stream); assertEquals(e.first.length, 2); - assertEquals(e.first.first, 0); - assertEquals(e.first.second, "1"); - assertEquals(e.second.first, 1); - assertEquals(e.second.second, "2"); + assertEquals(e.first.second, 0); + assertEquals(e.first.first, "1"); + assertEquals(e.second.second, 1); + assertEquals(e.second.first, "2"); } [Test]