diff --git a/streamjs/streamjs-tests.ts b/streamjs/streamjs-tests.ts index b1fba365cd..50a398418d 100644 --- a/streamjs/streamjs-tests.ts +++ b/streamjs/streamjs-tests.ts @@ -31,16 +31,62 @@ var strStream = numStream .takeWhile(s => s.length < 5) .takeWhile(/^aa.*$/) .slice(5, 2) - .forEach(s => console.log(s)) ; var strArray = strStream.toArray(); +strStream.forEach(s => console.log(s)); +var opt: Stream.Optional = strStream.findFirst(); +opt = strStream.findAny(); +opt = strStream.max(); +opt = strStream.max((s1, s2) => 0); +opt = strStream.min(); +opt = strStream.min((s1, s2) => 0); + +var sum = numStream.sum(); +var avg = numStream.average(); +avg = numStream.avg(); + +var count = numStream.count(); +count = numStream.size(); + +var allMatch: boolean = numStream.allMatch(n => true); +allMatch = strStream.allMatch(/^$/); + +var anyMatch: boolean = numStream.anyMatch(n => false); +anyMatch = strStream.anyMatch(/^$/); + +var noneMatch: boolean = numStream.noneMatch(n => false); +noneMatch = strStream.noneMatch(/^$/); + +sum = numStream.reduce(0, (n1, n2) => n1 + n2); +opt = strStream.reduce((s1, s2) => s1 + s2); + class MyList { elems: any[]; + name: string } var elems: any[]; -elems = Stream.make([new MyList, new MyList]) + +var myStream = Stream.make([new MyList, new MyList]); +elems = myStream .flatMap(list => list.elems) .toArray(); + //.forEach(s => console.log(s)); + + +numStream.collect({ + supplier: () => 0, + accumulator: (n1, n2) => n1 + n2, + finisher: n => n +}); + +var groupingResult = myStream.groupBy(lst => lst.name); +var elems = groupingResult["hello"].elems; +groupingResult = myStream.groupingBy(lst => lst.name); + +var mappingResult = myStream.toMap(lst => lst.name, (e1, e2) => e2); +console.log(mappingResult["a"]); + +myStream.toMap(lst => lst.name); diff --git a/streamjs/streamjs.d.ts b/streamjs/streamjs.d.ts index 1ac6c534c8..1478d7a68d 100644 --- a/streamjs/streamjs.d.ts +++ b/streamjs/streamjs.d.ts @@ -10,15 +10,40 @@ declare class Stream { static rangeClosed (startInclusive: number, endInclusive: number): Stream; static generate (supplier: () => T): Stream; + anyMatch(predicate: (elem: T) => boolean): boolean; + anyMatch(regexp: RegExp): boolean; + allMatch(predicate: (elem: T) => boolean): boolean; + allMatch(regexp: RegExp): boolean; + average(): number; + avg(): number; + collect(collector: Stream.Collector): T; + count(): number; distinct(): Stream; dropWhile(predicate: (elem: T) => boolean): Stream; dropWhile(regexp: RegExp): Stream; filter(predicate: (T) => boolean): Stream; + findAny(): Stream.Optional; + findFirst(): Stream.Optional; + forEach(consumer: (elem: T) => void): void; + + 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[]; + map (mapper: (T) => U): Stream; + max(): Stream.Optional; + max(comparator: (e1: T, e2: T) => number): Stream.Optional; + min(): Stream.Optional; + min(comparator: (elem1: T, elem2: T) => number): Stream.Optional; + noneMatch(predicate: (elem: T) => boolean): boolean; + noneMatch(regexp: RegExp): boolean; flatMap (mapper: (T) => U[]): Stream; limit(limit: number): Stream; 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; reverse(): Stream; + size(): number; sorted(): Stream; sorted(comparator: (e1: T, e2: T) => number): Stream; sort(): Stream; @@ -26,7 +51,24 @@ declare class Stream { shuffle(): Stream; skip(n: number): Stream; slice(begin, end): Stream; + sum(): T; takeWhile(predicate: (elem: T) => boolean): Stream; takeWhile(regexp: RegExp): Stream; toArray(): T[]; } + +declare module Stream { + export interface GroupingResult { + [index: string]: T + } + + export interface Collector { + supplier(): T; + accumulator(e1: T, e2: T): T; + finisher(result: T): T + } + + export class Optional { + + } +}