diff --git a/streamjs/streamjs-tests.ts b/streamjs/streamjs-tests.ts index 50a398418..e59af31ae 100644 --- a/streamjs/streamjs-tests.ts +++ b/streamjs/streamjs-tests.ts @@ -5,6 +5,7 @@ var numStream: Stream; numStream = Stream.make([10, 20]); numStream = Stream.range(1, 5); numStream = Stream.rangeClosed(1, 5); +// numStream = Stream.empty(); Stream.generate(function() { return 1; @@ -90,3 +91,34 @@ var mappingResult = myStream.toMap(lst => lst.name, (e1, e2) => e2); console.log(mappingResult["a"]); myStream.toMap(lst => lst.name); + +mappingResult = myStream.indexBy(lst => lst.name, (e1, e2) => e2); + +var partitionedNums: number[][] = numStream.partitioningBy(n => n % 2 == 0); +partitionedNums = numStream.partitionBy(n => n % 2 == 0); + +var partitionedStrings : string[][] = strStream.partitionBy(/^a$/); +partitionedStrings = strStream.partitioningBy(/^a$/); +partitionedStrings = strStream.partitioningBy(5); +partitionedStrings = strStream.partitionBy(5); + +var s: string = numStream.joining(); +s = numStream.join(); +s = numStream.joining(", "); +s = numStream.join(", "); +s = numStream.joining({prefix: "{", delimiter: ", ", suffix: "}"}); +s = numStream.join({prefix: "{", delimiter: ", ", suffix: "}"}); + + +var iter = numStream.iterator(); +var n: number = iter.next(); +var done: boolean = iter.done; + +var optNum: Stream.Optional = Stream.Optional.of(2); +optNum = Stream.Optional.ofNullable(null); +optNum = Stream.Optional.empty(); + +var optStr: Stream.Optional = optNum.filter(n => n % 2 == 0) + .map(n => "number" + n) + .flatMap(n => Stream.Optional.of(n + 2)) + ; diff --git a/streamjs/streamjs.d.ts b/streamjs/streamjs.d.ts index 1478d7a68..6d13346a9 100644 --- a/streamjs/streamjs.d.ts +++ b/streamjs/streamjs.d.ts @@ -9,6 +9,7 @@ declare class Stream { static range (startInclusive: number, endExclusive: number): Stream; static rangeClosed (startInclusive: number, endInclusive: number): Stream; static generate (supplier: () => T): Stream; + // static empty(): Stream; anyMatch(predicate: (elem: T) => boolean): boolean; anyMatch(regexp: RegExp): boolean; @@ -28,8 +29,7 @@ declare class Stream { groupBy(mapper: (elem: T) => string): Stream.GroupingResult; groupingBy(mapper: (elem: T) => string): Stream.GroupingResult; - toMap(keyMapper: (elem: T) => string, mergeFunction?: (elem1: T, elem2: T) => T): T[]; - + indexBy(keyMapper: (elem: T) => string, mergeFunction?: (elem1: T, elem2: T) => T): T[]; map (mapper: (T) => U): Stream; max(): Stream.Optional; max(comparator: (e1: T, e2: T) => number): Stream.Optional; @@ -38,7 +38,20 @@ declare class Stream { noneMatch(predicate: (elem: T) => boolean): boolean; noneMatch(regexp: RegExp): boolean; flatMap (mapper: (T) => U[]): Stream; + iterator(): Stream.Iterator; + joining(): string; + joining(delimiter: string): string; + joining(options: Stream.JoinOptions): string; + join(): string; + join(delimiter: string): string; + join(options: Stream.JoinOptions): string; limit(limit: number): Stream; + partitioningBy(predicate: (elem: T) => boolean): T[][]; + partitionBy(predicate: (elem: T) => boolean): T[][]; + partitioningBy(regexp: RegExp): T[][]; + partitionBy(regexp: RegExp): T[][]; + partitioningBy(size: number): T[][]; + partitionBy(size: number): T[][]; peek(consumer: (elem: T) => void ): Stream; reduce(identity: T, accumulator: (e1: T, e2: T) => T): T; reduce(accumulator: (e1: T, e2: T) => T): Stream.Optional; @@ -55,9 +68,22 @@ declare class Stream { takeWhile(predicate: (elem: T) => boolean): Stream; takeWhile(regexp: RegExp): Stream; toArray(): T[]; + toMap(keyMapper: (elem: T) => string, mergeFunction?: (elem1: T, elem2: T) => T): T[]; } declare module Stream { + + export interface Iterator { + next(): T; + done: boolean; + } + + export interface JoinOptions { + prefix: string; + delimiter: string; + suffix: string; + } + export interface GroupingResult { [index: string]: T } @@ -69,6 +95,12 @@ declare module Stream { } export class Optional { - + static of(elem: T): Optional; + static ofNullable(elem: T): Optional; + static empty(): Optional; + + filter(predicate: (elem: T) => boolean): Optional; + map(mapper: (elem: T) => U): Optional; + flatMap(mapper: (elem: T) => Stream.Optional): Optional; } }