import { Collector, BaseCollector, Supplier } from "../collector"; export class ToMapCollector> extends BaseCollector<[K, V], A, A> { protected supplier : Supplier; constructor ( supplier : Supplier ) { super(); this.supplier = supplier; } supply () : A { return this.supplier(); } accumulate ( container : A, [ key, value ] : [ K, V ] ) : void { container.set( key, value ); } combine ( container1 : A, container2 : A ) : A { for ( let value of container2 ) { this.accumulate( container1, value ); } return container1; } finish ( container : A ) : A { return container; } } export function toMap () : Collector<[K, V], Map, Map>; export function toMap> ( factory : Supplier ) : Collector<[K, V], A, A>; export function toMap> ( factory ?: Supplier ) : Collector<[K, V], A, A> { return new ToMapCollector( factory || ( () => new Map() as A ) ); }