import { Collector, BaseCollector, Supplier } from "../collector";
export interface Mapper<T, U> {
    (value: T): U;
}
export declare class GroupingByCollector<T, K, A, D, M extends Map<K, D>> extends BaseCollector<T, Map<K, A>, Map<K, D>> {
    protected mapper: Mapper<T, K>;
    protected supplier: Supplier<M>;
    protected collector: Collector<T, A, D>;
    constructor(mapper: Mapper<T, K>, supplier: Supplier<M>, collector: Collector<T, A, D>);
    supply(): Map<K, A>;
    accumulate(container: Map<K, A>, item: T): void;
    combine(container1: Map<K, A>, container2: Map<K, A>): Map<K, A>;
    finish(container: Map<K, A>): Map<K, D>;
}
export declare function groupingBy<T, K>(mapper: (item: T) => K): Collector<T, Map<K, T[]>, Map<K, T[]>>;
export declare function groupingBy<T, K, A, D>(mapper: (item: T) => K, collector: Collector<T, A, D>): Collector<T, Map<K, A>, Map<K, D>>;
export declare function groupingBy<T, K, A, D, M extends Map<K, D>>(mapper: (item: T) => K, supplier: Supplier<M>, collector: Collector<T, A, D>): Collector<T, Map<K, A>, Map<K, D>>;
