add collect to async enumerable
This commit is contained in:
13
src/async.ts
13
src/async.ts
@@ -4,6 +4,7 @@ import { createQueue } from "./queue.js";
|
|||||||
import { selectionSorter } from "./sorting.js";
|
import { selectionSorter } from "./sorting.js";
|
||||||
import { createAsyncEqualitySet } from "./equality-set.js";
|
import { createAsyncEqualitySet } from "./equality-set.js";
|
||||||
import { createAsyncEqualityMap } from "./equality-map.js";
|
import { createAsyncEqualityMap } from "./equality-map.js";
|
||||||
|
import { Collector } from "./collector.js";
|
||||||
|
|
||||||
//#region types
|
//#region types
|
||||||
|
|
||||||
@@ -134,6 +135,8 @@ export interface AsyncEnumerable<TElement> extends AsyncIterable<TElement> {
|
|||||||
toMap<TKey, TValue>(keySelector: MaybeAsyncConverter<TElement, TKey>, valueSelector: MaybeAsyncConverter<TElement, TValue>): Promise<Map<TKey, TValue>>;
|
toMap<TKey, TValue>(keySelector: MaybeAsyncConverter<TElement, TKey>, valueSelector: MaybeAsyncConverter<TElement, TValue>): Promise<Map<TKey, TValue>>;
|
||||||
toSet(): Promise<Set<TElement>>;
|
toSet(): Promise<Set<TElement>>;
|
||||||
toObject<TValue>(keySelector: MaybeAsyncConverter<TElement, PropertyKey>, valueSelector: MaybeAsyncConverter<TElement, TValue>): Promise<Record<PropertyKey, TValue>>;
|
toObject<TValue>(keySelector: MaybeAsyncConverter<TElement, PropertyKey>, valueSelector: MaybeAsyncConverter<TElement, TValue>): Promise<Record<PropertyKey, TValue>>;
|
||||||
|
|
||||||
|
collect<TResult>(collector: Collector<TElement, any, TResult>): Promise<TResult>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GroupedAsyncEnumerable<TKey, TElement> extends AsyncEnumerable<TElement> {
|
export interface GroupedAsyncEnumerable<TKey, TElement> extends AsyncEnumerable<TElement> {
|
||||||
@@ -898,6 +901,16 @@ export abstract class BaseAsyncEnumerable<TElement> implements AsyncEnumerable<T
|
|||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async collect<TResult>(collector: Collector<TElement, any, TResult>) {
|
||||||
|
const acc = collector.initialize();
|
||||||
|
|
||||||
|
for await (const e of this) {
|
||||||
|
collector.accumulate(acc, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return collector.finalize(acc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GroupedAsyncEnumerableImpl<TElement, TKey> extends BaseAsyncEnumerable<TElement> implements GroupedAsyncEnumerable<TKey, TElement> {
|
class GroupedAsyncEnumerableImpl<TElement, TKey> extends BaseAsyncEnumerable<TElement> implements GroupedAsyncEnumerable<TKey, TElement> {
|
||||||
|
|||||||
Reference in New Issue
Block a user