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 { createAsyncEqualitySet } from "./equality-set.js";
|
||||
import { createAsyncEqualityMap } from "./equality-map.js";
|
||||
import { Collector } from "./collector.js";
|
||||
|
||||
//#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>>;
|
||||
toSet(): Promise<Set<TElement>>;
|
||||
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> {
|
||||
@@ -898,6 +901,16 @@ export abstract class BaseAsyncEnumerable<TElement> implements AsyncEnumerable<T
|
||||
|
||||
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> {
|
||||
|
||||
Reference in New Issue
Block a user