UNPKG

data-collectors

Version:

A collection of composable reduction operations for arbitrary streams of values

51 lines 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const collector_1 = require("../collector"); const toArray_1 = require("./toArray"); class GroupingByCollector extends collector_1.BaseCollector { constructor(mapper, supplier, collector) { super(); this.mapper = mapper; this.supplier = supplier; this.collector = collector; } supply() { return new Map(); } accumulate(container, item) { const key = this.mapper(item); if (!container.get(key)) { const subContainer = this.collector.supply(); container.set(key, subContainer); this.collector.accumulate(subContainer, item); } else { this.collector.accumulate(container.get(key), item); } } combine(container1, container2) { for (let [key, value] of container2) { container1.set(key, this.collector.combine(container1.get(key), value)); } return container1; } finish(container) { let finished = this.supplier(); for (let [key, value] of container) { finished.set(key, this.collector.finish(value)); } return finished; } } exports.GroupingByCollector = GroupingByCollector; function groupingBy(mapper, supplier, collector) { if (!supplier && !collector) { return groupingBy(mapper, () => new Map(), toArray_1.toArray()); } else if (!collector) { return groupingBy(mapper, () => new Map(), supplier); } return new GroupingByCollector(mapper, supplier, collector); } exports.groupingBy = groupingBy; //# sourceMappingURL=groupingBy.js.map