import CircularIterator from "./CircularIterator"; import Function from "./Function"; import Predicate from "./Predicate"; import Stream from "./Stream"; export default class CircularStream implements Stream { private it: CircularIterator; constructor(private values: E[]) { this.it = CircularIterator.of(values); } public static of(values: E[]): CircularStream { return new CircularStream(values); } public filter(filter: Predicate): CircularStream { this.it = CircularIterator.of(this.it.getValues().filter(filter)); return this; } public map(map: Function): CircularStream { return CircularStream.of(this.it.getValues().map(map)); } public limit(size: number): E[] { let values: E[] = []; while (size-- > 0) { values.push(this.it.next().value); } return values; } public skip(amount: number): this { while (amount-- > 0) { this.it.next(); } return this; } }