import { Collector, BaseCollector } from "../collector";
import { Mapper } from "../collections/groupingBy";
export interface DistinctContainer<T, U> {
    keys: Map<U, number>;
    items: [U, T][];
}
export declare class DistinctCollector<T, U, A, R> extends BaseCollector<T, DistinctContainer<T, U>, R> {
    protected keyer: Mapper<T, U>;
    protected collector: Collector<T, A, R>;
    constructor(keyer: Mapper<T, U>, collector: Collector<T, A, R>);
    supply(): DistinctContainer<T, U>;
    accumulate(container: DistinctContainer<T, U>, item: T): void;
    combine(container1: DistinctContainer<T, U>, container2: DistinctContainer<T, U>): DistinctContainer<T, U>;
    finish(container: DistinctContainer<T, U>): R;
}
export declare function distinct<T>(): Collector<T, DistinctContainer<T, T>, T[]>;
export declare function distinct<T, U>(keyer: Mapper<T, U>): Collector<T, DistinctContainer<T, U>, T[]>;
export declare function distinct<T, U, A, R>(keyer: Mapper<T, U>, collector?: Collector<U, any, R>): Collector<T, DistinctContainer<T, U>, R>;
