1
0

add collect to async enumerable

This commit is contained in:
2024-05-08 20:40:51 +02:00
parent dd1f271674
commit 36c06874fa

View File

@@ -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> {