semantic-typescript 0.2.6 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/readme.de.md CHANGED
@@ -1,10 +1,10 @@
1
- # Semantic-TypeScript Stream-Verarbeitungsbibliothek
1
+ # Semantic-TypeScript Stream Processing Library
2
2
 
3
- ## Einführung
3
+ ## Einleitung
4
4
 
5
- Semantic-TypeScript ist eine moderne Stream-Verarbeitungsbibliothek, die von JavaScript GeneratorFunction, Java Stream und MySQL Index inspiriert wurde. Der Kernentwurf der Bibliothek basiert auf der Erstellung effizienter Datenverarbeitungspipelines mittels Datenindizes, um TypeScript-Entwicklern eine typsichere, funktionale Stream-Verarbeitungserfahrung zu bieten.
5
+ Semantic-TypeScript ist eine moderne Stream-Verarbeitungsbibliothek, inspiriert von JavaScript GeneratorFunction, Java Stream und MySQL Index. Seine Kernphilosophie basiert auf dem Aufbau effizienter Datenverarbeitungspipelines mit Hilfe von Datenindizierung und bietet eine typsichere, funktionsbasierte Streaming-Benutzererfahrung für Frontend-Entwicklung.
6
6
 
7
- Im Gegensatz zur traditionellen synchronen Verarbeitung verwendet Semantic einen asynchronen Verarbeitungsmodus. Beim Erstellen von Datenströmen hängt der Zeitpunkt des Datenempfangs vollständig davon ab, wann die Upstream-Quelle die `accept`- und `interrupt`-Callback-Funktionen aufruft. Dieser Entwurf ermöglicht der Bibliothek die elegante Verarbeitung von Echtzeit-Datenströmen, großen Datensätzen und asynchronen Datenquellen.
7
+ Im Gegensatz zur traditionellen synchronen Verarbeitung verwendet Semantic ein asynchrones Verarbeitungsmodell. Beim Erstellen eines Datenstroms hängt die Zeit, zu der das Terminal Daten empfängt, vollständig davon ab, wann der Upstream die `accept`- und `interrupt`-Callback-Funktionen aufruft. Dieses Design ermöglicht es der Bibliothek, Echtzeitdatenströme, große Datensätze und asynchrone Datenquellen elegant zu verarbeiten.
8
8
 
9
9
  ## Installation
10
10
 
@@ -12,393 +12,405 @@ Im Gegensatz zur traditionellen synchronen Verarbeitung verwendet Semantic einen
12
12
  npm install semantic-typescript
13
13
  ```
14
14
 
15
- ## Grundtypen
15
+ ## Grundlegende Typen
16
16
 
17
17
  | Typ | Beschreibung |
18
18
  |------|-------------|
19
- | `Invalid<T>` | Ein Typ, der null oder undefined erweitert |
20
- | `Valid<T>` | Ein Typ, der null und undefined ausschließt |
21
- | `MaybeInvalid<T>` | Ein Typ, der null oder undefined sein kann |
22
- | `Primitive` | Sammlung von primitiven Typen |
23
- | `MaybePrimitive<T>` | Ein Typ, der ein primitiver Typ sein kann |
24
- | `OptionalSymbol` | Symbolkennung der Klasse Optional |
25
- | `SemanticSymbol` | Symbolkennung der Klasse Semantic |
26
- | `CollectorsSymbol` | Symbolkennung der Klasse Collector |
27
- | `CollectableSymbol` | Symbolkennung der Klasse Collectable |
28
- | `OrderedCollectableSymbol` | Symbolkennung der Klasse OrderedCollectable |
29
- | `WindowCollectableSymbol` | Symbolkennung der Klasse WindowCollectable |
30
- | `StatisticsSymbol` | Symbolkennung der Klasse Statistics |
31
- | `NumericStatisticsSymbol` | Symbolkennung der Klasse NumericStatistics |
32
- | `BigIntStatisticsSymbol` | Symbolkennung der Klasse BigIntStatistics |
33
- | `UnorderedCollectableSymbol` | Symbolkennung der Klasse UnorderedCollectable |
34
-
35
- ## Funktionale Schnittstellen
19
+ | `Invalid<T>` | Typ, der sich von `null` oder `undefined` ableitet |
20
+ | `Valid<T>` | Typ, der `null` und `undefined` ausschließt |
21
+ | `MaybeInvalid<T>` | Typ, der `null` oder `undefined` sein kann |
22
+ | `Primitive` | Sammlung primitiver Typen |
23
+ | `MaybePrimitive<T>` | Typ, der ein primitiver Typ sein kann |
24
+ | `OptionalSymbol` | Symbolbezeichner der `Optional`-Klasse |
25
+ | `SemanticSymbol` | Symbolbezeichner der `Semantic`-Klasse |
26
+ | `CollectorsSymbol` | Symbolbezeichner der `Collector`-Klasse |
27
+ | `CollectableSymbol` | Symbolbezeichner der `Collectable`-Klasse |
28
+ | `OrderedCollectableSymbol` | Symbolbezeichner der `OrderedCollectable`-Klasse |
29
+ | `WindowCollectableSymbol` | Symbolbezeichner der `WindowCollectable`-Klasse |
30
+ | `StatisticsSymbol` | Symbolbezeichner der `Statistics`-Klasse |
31
+ | `NumericStatisticsSymbol` | Symbolbezeichner der `NumericStatistics`-Klasse |
32
+ | `BigIntStatisticsSymbol` | Symbolbezeichner der `BigIntStatistics`-Klasse |
33
+ | `UnorderedCollectableSymbol` | Symbolbezeichner der `UnorderedCollectable`-Klasse |
34
+
35
+ ## Funktionsorientierte Schnittstellen
36
36
 
37
37
  | Schnittstelle | Beschreibung |
38
- |---------------|-------------|
39
- | `Runnable` | Funktion ohne Parameter und Rückgabewert |
40
- | `Supplier<R>` | Funktion ohne Parameter, gibt R zurück |
41
- | `Functional<T, R>` | Einzelparameter-Konvertierungsfunktion |
42
- | `BiFunctional<T, U, R>` | Zweiparameter-Konvertierungsfunktion |
43
- | `TriFunctional<T, U, V, R>` | Dreiparameter-Konvertierungsfunktion |
44
- | `Predicate<T>` | Einzelparameter-Auswahlfunktion |
45
- | `BiPredicate<T, U>` | Zweiparameter-Auswahlfunktion |
46
- | `TriPredicate<T, U, V>` | Dreiparameter-Auswahlfunktion |
47
- | `Consumer<T>` | Einzelparameter-Verarbeitungsfunktion |
48
- | `BiConsumer<T, U>` | Zweiparameter-Verarbeitungsfunktion |
49
- | `TriConsumer<T, U, V>` | Dreiparameter-Verarbeitungsfunktion |
38
+ |-----------|-------------|
39
+ | `Runnable` | Funktion ohne Parameter und ohne Rückgabewert |
40
+ | `Supplier<R>` | Funktion ohne Parameter, die `R` zurückgibt |
41
+ | `Functional<T, R>` | Einzelparameter-Transformationsfunktion |
42
+ | `BiFunctional<T, U, R>` | Zweiparameter-Transformationsfunktion |
43
+ | `TriFunctional<T, U, V, R>` | Dreiparameter-Transformationsfunktion |
44
+ | `Predicate<T>` | Einzelparameter-Prädikatfunktion |
45
+ | `BiPredicate<T, U>` | Zweiparameter-Prädikatfunktion |
46
+ | `TriPredicate<T, U, V>` | Dreiparameter-Prädikatfunktion |
47
+ | `Consumer<T>` | Einzelparameter-Consumerfunktion |
48
+ | `BiConsumer<T, U>` | Zweiparameter-Consumerfunktion |
49
+ | `TriConsumer<T, U, V>` | Dreiparameter-Consumerfunktion |
50
50
  | `Comparator<T>` | Zweiparameter-Vergleichsfunktion |
51
51
  | `Generator<T>` | Generatorfunktion (Kern und Basis) |
52
52
 
53
53
  ```typescript
54
- // Typverwendungsbeispiele
55
- const predicate: Predicate<number> = (n) => n > 0;
56
- const mapper: Functional<string, number> = (str) => str.length;
57
- const comparator: Comparator<number> = (a, b) => a - b;
54
+ // Beispiel für die Verwendung von Typen
55
+ let predicate: Predicate<number> = (n: number): boolean => n > 0;
56
+ let mapper: Functional<string, number> = (text: string): number => text.length;
57
+ let comparator: Comparator<number> = (a: number, b: number): number => a - b;
58
58
  ```
59
59
 
60
- ## Typwächter (Type Guards)
61
-
62
- | Funktion | Beschreibung | Zeitkomplexität | Raumkomplexität |
63
- |----------|-------------|-----------------|-----------------|
64
- | `validate<T>(t: MaybeInvalid<T>): t is T` | Prüft, ob Wert nicht null oder undefined | O(1) | O(1) |
65
- | `invalidate<T>(t: MaybeInvalid<T>): t is null \| undefined` | Prüft, ob Wert null oder undefined | O(1) | O(1) |
66
- | `isBoolean(t: unknown): t is boolean` | Prüft auf Boolean | O(1) | O(1) |
67
- | `isString(t: unknown): t is string` | Prüft auf String | O(1) | O(1) |
68
- | `isNumber(t: unknown): t is number` | Prüft auf Number | O(1) | O(1) |
69
- | `isFunction(t: unknown): t is Function` | Prüft auf Function | O(1) | O(1) |
70
- | `isObject(t: unknown): t is object` | Prüft auf Object | O(1) | O(1) |
71
- | `isSymbol(t: unknown): t is symbol` | Prüft auf Symbol | O(1) | O(1) |
72
- | `isBigint(t: unknown): t is bigint` | Prüft auf BigInt | O(1) | O(1) |
73
- | `isPrimitive(t: unknown): t is Primitive` | Prüft auf Primitivtyp | O(1) | O(1) |
74
- | `isIterable(t: unknown): t is Iterable<unknown>` | Prüft auf Iterierbarkeit | O(1) | O(1) |
75
- | `isOptional(t: unknown): t is Optional<unknown>` | Prüft auf Optional-Instanz | O(1) | O(1) |
76
- | `isSemantic(t: unknown): t is Semantic<unknown>` | Prüft auf Semantic-Instanz | O(1) | O(1) |
77
- | `isCollector(t: unknown): t is Collector<unknown, unknown, unknown>` | Prüft auf Collector-Instanz | O(1) | O(1) |
78
- | `isCollectable(t: unknown): t is Collectable<unknown>` | Prüft auf Collectable-Instanz | O(1) | O(1) |
79
- | `isOrderedCollectable(t: unknown): t is OrderedCollectable<unknown>` | Prüft auf OrderedCollectable-Instanz | O(1) | O(1) |
80
- | `isWindowCollectable(t: unknown): t is WindowCollectable<unknown>` | Prüft auf WindowCollectable-Instanz | O(1) | O(1) |
81
- | `isUnorderedCollectable(t: unknown): t is UnorderedCollectable<unknown>` | Prüft auf UnorderedCollectable-Instanz | O(1) | O(1) |
82
- | `isStatistics(t: unknown): t is Statistics<unknown, number \| bigint>` | Prüft auf Statistics-Instanz | O(1) | O(1) |
83
- | `isNumericStatistics(t: unknown): t is NumericStatistics<unknown>` | Prüft auf NumericStatistics-Instanz | O(1) | O(1) |
84
- | `isBigIntStatistics(t: unknown): t is BigIntStatistics<unknown>` | Prüft auf BigIntStatistics-Instanz | O(1) | O(1) |
60
+ ## Typguards
61
+
62
+ | Funktion | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
63
+ |------|------|------------|------------|
64
+ | `validate<T>(t: MaybeInvalid<T>): t is T` | Überprüft, ob der Wert nicht null oder undefined ist | O(1) | O(1) |
65
+ | `invalidate<T>(t: MaybeInvalid<T>): t is null \| undefined` | Überprüft, ob der Wert null oder undefined ist | O(1) | O(1) |
66
+ | `isBoolean(t: unknown): t is boolean` | Überprüft, ob es sich um einen booleschen Wert handelt | O(1) | O(1) |
67
+ | `isString(t: unknown): t is string` | Überprüft, ob es sich um einen String handelt | O(1) | O(1) |
68
+ | `isNumber(t: unknown): t is number` | Überprüft, ob es sich um eine Zahl handelt | O(1) | O(1) |
69
+ | `isFunction(t: unknown): t is Function` | Überprüft, ob es sich um eine Funktion handelt | O(1) | O(1) |
70
+ | `isObject(t: unknown): t is object` | Überprüft, ob es sich um ein Objekt handelt | O(1) | O(1) |
71
+ | `isSymbol(t: unknown): t is symbol` | Überprüft, ob es sich um ein Symbol handelt | O(1) | O(1) |
72
+ | `isBigint(t: unknown): t is bigint` | Überprüft, ob es sich um ein BigInt handelt | O(1) | O(1) |
73
+ | `isPrimitive(t: unknown): t is Primitive` | Überprüft, ob es sich um einen primitiven Typ handelt | O(1) | O(1) |
74
+ | `isIterable(t: unknown): t is Iterable<unknown>` | Überprüft, ob es sich um ein iterierbares Objekt handelt | O(1) | O(1) |
75
+ | `isOptional(t: unknown): t is Optional<unknown>` | Überprüft, ob es sich um eine Optional-Instanz handelt | O(1) | O(1) |
76
+ | `isSemantic(t: unknown): t is Semantic<unknown>` | Überprüft, ob es sich um eine Semantic-Instanz handelt | O(1) | O(1) |
77
+ | `isCollector(t: unknown): t is Collector<unknown, unknown, unknown>` | Überprüft, ob es sich um eine Collector-Instanz handelt | O(1) | O(1) |
78
+ | `isCollectable(t: unknown): t is Collectable<unknown>` | Überprüft, ob es sich um eine Collectable-Instanz handelt | O(1) | O(1) |
79
+ | `isOrderedCollectable(t: unknown): t is OrderedCollectable<unknown>` | Überprüft, ob es sich um eine OrderedCollectable-Instanz handelt | O(1) | O(1) |
80
+ | `isWindowCollectable(t: unknown): t is WindowCollectable<unknown>` | Überprüft, ob es sich um eine WindowCollectable-Instanz handelt | O(1) | O(1) |
81
+ | `isUnorderedCollectable(t: unknown): t is UnorderedCollectable<unknown>` | Überprüft, ob es sich um eine UnorderedCollectable-Instanz handelt | O(1) | O(1) |
82
+ | `isStatistics(t: unknown): t is Statistics<unknown, number \| bigint>` | Überprüft, ob es sich um eine Statistics-Instanz handelt | O(1) | O(1) |
83
+ | `isNumericStatistics(t: unknown): t is NumericStatistics<unknown>` | Überprüft, ob es sich um eine NumericStatistics-Instanz handelt | O(1) | O(1) |
84
+ | `isBigIntStatistics(t: unknown): t is BigIntStatistics<unknown>` | Überprüft, ob es sich um eine BigIntStatistics-Instanz handelt | O(1) | O(1) |
85
+ | `isPromise(t: unknown): t is Promise<unknown>` | Überprüft, ob es sich um ein Promise-Objekt handelt | O(1) | O(1) |
86
+ | `isAsync(t: unknown): t is AsyncFunction` | Überprüft, ob es sich um eine AsyncFunction handelt | O(1) | O(1) |
85
87
 
86
88
  ```typescript
87
- // Typwächter-Verwendungsbeispiele
88
- const value: unknown = "hello";
89
+ // Beispiel für die Verwendung von Typguards
90
+ let value: unknown = "hello";
89
91
 
90
92
  if (isString(value)) {
91
- console.log(value.length); // Typsicher, value wird als string inferiert
93
+ console.log(value.length); // Typsicher, value wird als string abgeleitet
92
94
  }
93
95
 
94
96
  if (isOptional(someValue)) {
95
- someValue.ifPresent(val => console.log(val));
97
+ someValue.ifPresent((value): void => console.log(val));
98
+ }
99
+
100
+ if(isIterable(value)){
101
+ // Typsicher, jetzt ist es ein iterierbares Objekt.
102
+ for(let item of value){
103
+ console.log(item);
104
+ }
96
105
  }
97
106
  ```
98
107
 
99
108
  ## Hilfsfunktionen
100
109
 
101
- | Funktion | Beschreibung | Zeitkomplexität | Raumkomplexität |
102
- |----------|-------------|-----------------|-----------------|
110
+ | Funktion | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
111
+ |------|------|------------|------------|
103
112
  | `useCompare<T>(t1: T, t2: T): number` | Allgemeine Vergleichsfunktion | O(1) | O(1) |
104
113
  | `useRandom<T = number \| bigint>(index: T): T` | Pseudozufallszahlengenerator | O(log n) | O(1) |
105
114
 
106
115
  ```typescript
107
- // Hilfsfunktions-Verwendungsbeispiele
108
- const numbers = [3, 1, 4, 1, 5];
116
+ // Beispiel für die Verwendung von Hilfsfunktionen
117
+ let numbers: Array<number> = [3, 1, 4, 1, 5];
109
118
  numbers.sort(useCompare); // [1, 1, 3, 4, 5]
110
119
 
111
- const randomNum = useRandom(42); // Seed-basierte Zufallszahl
112
- const randomBigInt = useRandom(1000n); // BigInt-Zufallszahl
120
+ let randomNum = useRandom(42); // Saat-basierter Zufallszahl
113
121
  ```
114
122
 
115
123
  ## Fabrikmethoden
116
124
 
117
- ### Optional-Fabrikmethoden
125
+ ### Optionale Fabrikmethoden
118
126
 
119
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
120
- |---------|-------------|-----------------|-----------------|
121
- | `Optional.empty<T>()` | Erstellt leeres Optional | O(1) | O(1) |
122
- | `Optional.of<T>(value)` | Erstellt Optional mit Wert | O(1) | O(1) |
123
- | `Optional.ofNullable<T>(value)` | Erstellt Optional, das null sein kann | O(1) | O(1) |
124
- | `Optional.ofNonNull<T>(value)` | Erstellt nicht-null Optional | O(1) | O(1) |
127
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
128
+ |------|------|------------|------------|
129
+ | `Optional.empty<T>()` | Erstellt eine leere Optional | O(1) | O(1) |
130
+ | `Optional.of<T>(value)` | Erstellt eine Optional, die einen Wert enthält | O(1) | O(1) |
131
+ | `Optional.ofNullable<T>(value)` | Erstellt eine potenziell leere Optional | O(1) | O(1) |
132
+ | `Optional.ofNonNull<T>(value)` | Erstellt eine nicht-null Optional | O(1) | O(1) |
125
133
 
126
134
  ```typescript
127
- // Optional-Verwendungsbeispiele
128
- const emptyOpt = Optional.empty<number>();
129
- const presentOpt = Optional.of(42);
130
- const nullableOpt = Optional.ofNullable<string>(null);
131
- const nonNullOpt = Optional.ofNonNull("hello");
132
-
133
- presentOpt.ifPresent(val => console.log(val)); // Gibt 42 aus
134
- console.log(emptyOpt.orElse(100)); // Gibt 100 aus
135
+ // Beispiele für die Verwendung von Optional
136
+ let empty: Optional<number> = Optional.empty();
137
+ let present: Optional<number> = Optional.of(42);
138
+ let nullable: Optional<string> = Optional.ofNullable<string>(null);
139
+ let nonNull: Optional<string> = Optional.ofNonNull("hello");
140
+
141
+ present.ifPresent((value: number): void => console.log(value)); // Gibt 42 aus
142
+ console.log(empty.get(100)); // Gibt 100 aus
135
143
  ```
136
144
 
137
- ### Collector-Fabrikmethoden
145
+ ### Collector Fabrikmethoden
138
146
 
139
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
140
- |---------|-------------|-----------------|-----------------|
141
- | `Collector.full(identity, accumulator, finisher)` | Erstellt vollständigen Collector | O(1) | O(1) |
142
- | `Collector.shortable(identity, interruptor, accumulator, finisher)` | Erstellt unterbrechbaren Collector | O(1) | O(1) |
147
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
148
+ |------|------|------------|------------|
149
+ | `Collector.full(identity, accumulator, finisher)` | Erstellt einen vollständigen Collector | O(1) | O(1) |
150
+ | `Collector.shortable(identity, interruptor, accumulator, finisher)` | Erstellt einen unterbrechbaren Collector | O(1) | O(1) |
143
151
 
144
152
  ```typescript
145
- // Beispiele für Collector-Konvertierung
146
- const numbers = from([3, 1, 4, 1, 5, 9, 2, 6, 5]);
153
+ // Beispiele für die Konvertierung von Collectors
154
+ let numbers: Semantic<number> = from([3, 1, 4, 1, 5, 9, 2, 6, 5]);
147
155
 
148
- // Leistung zuerst: Verwende ungeordneten Collector
149
- const unordered = numbers
150
- .filter(n => n > 3)
151
- .toUnoredered();
156
+ // Leistung zuerst: verwenden Sie den ungeordneten Collector
157
+ let unordered: UnorderedCollectable<number> = from([3, 1, 4, 1, 5, 9, 2, 6, 5])
158
+ .filter((n: number): boolean => n > 3)
159
+ .toUnordered();
152
160
 
153
- // Sortierung benötigt: Verwende geordneten Collector
154
- const ordered = numbers.sorted();
161
+ // Sortierung erforderlich: verwenden Sie den geordneten Collector
162
+ let ordered: OrderedCollectable<number> = from([3, 1, 4, 1, 5, 9, 2, 6, 5])
163
+ .sorted();
155
164
 
156
165
  // Zählt die Anzahl der Elemente
157
- let count = Collector.full(
158
- () => 0, // Anfangswert
159
- (accumulator, element) => accumulator + element, // Akkumulieren
160
- (accumulator) => accumulator // Abschluss
166
+ let count: Collector<number, number, number> = Collector.full(
167
+ (): number => 0, // Anfangswert
168
+ (accumulator: number, element: number): number => accumulator + element, // Akkumulieren
169
+ (accumulator: number): number => accumulator // Fertigstellen
161
170
  );
162
171
  count.collect(from([1,2,3,4,5])); // Zählt aus einem Stream
163
- count.collect([1,2,3,4,5]); // Zählt aus einem Iterable-Objekt
172
+ count.collect([1,2,3,4,5]); // Zählt aus einem iterierbaren Objekt
164
173
 
165
- let find = Collector.shortable(
166
- () => Optional.empty(), // Anfangswert
167
- (element, index, accumulator) => accumulator.isPresent(), // Unterbrechen
168
- (accumulator, element, index) => Optional.of(element), // Akkumulieren
169
- (accumulator) => accumulator // Abschluss
174
+ let find: Optional<number> = Collector.shortable(
175
+ (): Optional<number> => Optional.empty(), // Anfangswert
176
+ (element: number, index: bigint, accumulator: Optional<number>): Optional<number> => accumulator.isPresent(), // Unterbrechen
177
+ (accumulator: Optional<number>, element: number, index: bigint): Optional<number> => Optional.of(element), // Akkumulieren
178
+ (accumulator: Optional<number>): Optional<number> => accumulator // Fertigstellen
170
179
  );
171
180
  find.collect(from([1,2,3,4,5])); // Findet das erste Element
172
181
  find.collect([1,2,3,4,5]); // Findet das erste Element
173
182
  ```
174
183
 
175
- ### Semantic-Fabrikmethoden
184
+ ### Semantic Fabrikmethoden
176
185
 
177
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
178
- |---------|--------------|-----------------|-----------------|
179
- | `blob(blob, chunkSize)` | Erzeugt Stream aus Blob | O(n) | O(chunkSize) |
180
- | `empty<E>()` | Erzeugt leeren Stream | O(1) | O(1) |
181
- | `fill<E>(element, count)` | Erzeugt gefüllten Stream | O(n) | O(1) |
182
- | `from<E>(iterable)` | Erzeugt Stream aus iterierbarem Objekt | O(1) | O(1) |
183
- | `generate<E>(element, interrupt)` | Erzeugt Stream mit Generatorfunktion | O(1) | O(1) |
184
- | `interval(period, delay?)` | Erzeugt regelmäßigen Intervall-Stream | O(1)* | O(1) |
185
- | `iterate<E>(generator)` | Erzeugt Stream aus Generator | O(1) | O(1) |
186
- | `range(start, end, step)` | Erzeugt numerischen Bereichs-Stream | O(n) | O(1) |
187
- | `websocket(websocket)` | Erzeugt Stream aus WebSocket | O(1) | O(1) |
186
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
187
+ |------|------|------------|------------|
188
+ | `animationFrame(period: number, delay: number = 0)` | Erstellt einen zeitgesteuerten Animationsframe-Stream | O(1)* | O(1) |
189
+ | `blob(blob, chunkSize)` | Erstellt einen Stream aus einem Blob | O(n) | O(chunkSize) |
190
+ | `empty<E>()` | Erstellt einen leeren Stream | O(1) | O(1) |
191
+ | `fill<E>(element, count)` | Erstellt einen gefüllten Stream | O(n) | O(1) |
192
+ | `from<E>(iterable)` | Erstellt einen Stream aus einem iterierbaren Objekt | O(1) | O(1) |
193
+ | `interval(period, delay?)` | Erstellt einen zeitgesteuerten Intervall-Stream | O(1)* | O(1) |
194
+ | `iterate<E>(generator)` | Erstellt einen Stream aus einem Generator | O(1) | O(1) |
195
+ | `range(start, end, step)` | Erstellt einen numerischen Bereichs-Stream | O(n) | O(1) |
196
+ | `websocket(websocket)` | Erstellt einen Stream aus einem WebSocket | O(1) | O(1) |
188
197
 
189
198
  ```typescript
190
- // Beispiel zur Verwendung der Semantic-Fabrikmethoden
199
+ // Beispiele für die Verwendung von Semantic Fabrikmethoden
200
+
201
+ // Erstellt einen Stream aus einem zeitgesteuerten Animationsframe
202
+ animationFrame(1000)
203
+ .toUnordered()
204
+ .forEach(frame => console.log(frame));
191
205
 
192
- // Stream aus Blob erzeugen (chunkweises Lesen)
206
+ // Erstellt einen Stream aus einem Blob (chunked reading)
193
207
  blob(someBlob, 1024n)
194
- .toUnordered()
195
- .write(WritableStream)
196
- .then(callback) // Stream-Schreibvorgang erfolgreich
197
- .catch(writeFi); // Stream-Schreibvorgang fehlgeschlagen
208
+ .toUnordered()
209
+ .write(WritableStream)
210
+ .then(callback) // Schreiben des Streams erfolgreich
211
+ .catch(callback); // Schreiben des Streams fehlgeschlagen
198
212
 
199
- // Leeren Stream erzeugen, der erst nach Verknüpfung mit anderen Streams ausgeführt wird
213
+ // Erstellt einen leeren Stream, der erst ausgeführt wird, wenn er mit anderen Streams verkettet wird
200
214
  empty<string>()
201
- .toUnordered()
202
- .join(); //[]
215
+ .toUnordered()
216
+ .join(); //[]
203
217
 
204
- // Gefüllten Stream erzeugen
205
- const filledStream = fill("hello", 3); // "hello", "hello", "hello"
218
+ // Erstellt einen gefüllten Stream
219
+ let filledStream = fill("hello", 3); // "hello", "hello", "hello"
206
220
 
207
- // Zeitgesteuerten Stream mit 2 Sekunden anfänglicher Verzögerung und 5 Sekunden Zyklus erzeugen,
208
- // implementiert über Timer-Mechanismus, mögliche Zeitabweichungen aufgrund von System-Schedulereinschränkungen.
209
- const intervalStream = interval(5000, 2000);
221
+ // Erstellt einen zeitgesteuerten Stream mit einer anfänglichen Verzögerung von 2 Sekunden und einer Ausführungsperiode von 5 Sekunden, implementiert auf der Grundlage eines Timer-Mechanismus; kann aufgrund von Systemplanungsgenauigkeitsbeschränkungen zu Zeitdrift führen.
222
+ let intervalStream = interval(5000, 2000);
210
223
 
211
- // Stream aus iterierbarem Objekt erzeugen
212
- const numberStream = from([1, 2, 3, 4, 5]);
213
- const stringStream = from(new Set(["Alex", "Bob"]));
224
+ // Erstellt einen Stream aus einem iterierbaren Objekt
225
+ let numberStream = from([1, 2, 3, 4, 5]);
226
+ let stringStream = from(new Set(["Alex", "Bob"]));
214
227
 
215
- // Bereichs-Stream erzeugen
216
- const rangeStream = range(1, 10, 2); // 1, 3, 5, 7, 9
228
+ // Erstellt einen Bereichs-Stream
229
+ let rangeStream = range(1, 10, 2); // 1, 3, 5, 7, 9
217
230
 
218
- // WebSocket-Ereignisstream
219
- const ws = new WebSocket("ws://localhost:8080");
231
+ // WebSocket-Ereignis-Stream
232
+ let ws = new WebSocket("ws://localhost:8080");
220
233
  websocket(ws)
221
- .filter((event)=> event.type === "message") // Nur Nachrichtenereignisse überwachen
222
- .toUnordered() // Für Ereignisse normalerweise ungeordnet
223
- .forEach((event)=> receive(event)); // Nachrichten empfangen
234
+ .filter((event): boolean => event.type === "message"); // Nur Nachrichtenereignisse abhören
235
+ .toUnordered() // Ereignisse sind in der Regel nicht geordnet
236
+ .forEach((event): void => receive(event)); // Nachrichten empfangen
224
237
  ```
225
238
 
226
- ## Semantic-Klassenmethoden
239
+ ## Semantic Klassenmethoden
227
240
 
228
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
229
- |---------|-------------|-----------------|-----------------|
241
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
242
+ |------|------|------------|------------|
230
243
  | `concat(other)` | Verbindet zwei Streams | O(n) | O(1) |
231
244
  | `distinct()` | Entfernt Duplikate | O(n) | O(n) |
232
- | `distinct(comparator)` | Entfernt Duplikate mit Comparator | O(n²) | O(n) |
233
- | `dropWhile(predicate)` | Verwirft Elemente, die Prädikat erfüllen | O(n) | O(1) |
245
+ | `distinct(comparator)` | Entfernt Duplikate mit einem Vergleichsoperator | O(n²) | O(n) |
246
+ | `dropWhile(predicate)` | Verwirft Elemente, die die Bedingung erfüllen | O(n) | O(1) |
234
247
  | `filter(predicate)` | Filtert Elemente | O(n) | O(1) |
235
- | `flat(mapper)` | Flache Abbildung | O(n × m) | O(1) |
236
- | `flatMap(mapper)` | Flache Abbildung auf neuen Typ | O(n × m) | O(1) |
237
- | `limit(n)` | Begrenzt Elementanzahl | O(n) | O(1) |
238
- | `map(mapper)` | Transformationsabbildung | O(n) | O(1) |
239
- | `peek(consumer)` | Zeigt Elemente an | O(n) | O(1) |
240
- | `redirect(redirector)` | Index-Umleitung | O(n) | O(1) |
241
- | `reverse()` | Kehrt Stream um | O(n) | O(1) |
242
- | `shuffle()` | Zufällige Neuanordnung | O(n) | O(1) |
243
- | `shuffle(mapper)` | Neuanordnung mit Mapper | O(n) | O(1) |
244
- | `skip(n)` | Überspringt erste n Elemente | O(n) | O(1) |
248
+ | `flat(mapper)` | Flachemapping | O(n × m) | O(1) |
249
+ | `flatMap(mapper)` | Flachemapping in einen neuen Typ | O(n × m) | O(1) |
250
+ | `limit(n)` | Begrenzt die Anzahl der Elemente | O(n) | O(1) |
251
+ | `map(mapper)` | Zuordnungstransformation | O(n) | O(1) |
252
+ | `peek(consumer)` | Blickt auf Elemente | O(n) | O(1) |
253
+ | `redirect(redirector)` | Leitet den Index um | O(n) | O(1) |
254
+ | `reverse()` | Umkehrt den Stream | O(n) | O(1) |
255
+ | `shuffle()` | Mischt zufällig | O(n) | O(1) |
256
+ | `shuffle(mapper)` | Mischt mit einem Mapper | O(n) | O(1) |
257
+ | `skip(n)` | Überspringt die ersten n Elemente | O(n) | O(1) |
245
258
  | `sorted()` | Sortiert | O(n log n) | O(n) |
246
- | `sorted(comparator)` | Sortiert mit Comparator | O(n log n) | O(n) |
247
- | `sub(start, end)` | Erstellt Substream | O(n) | O(1) |
248
- | `takeWhile(predicate)` | Nimmt Elemente, die Prädikat erfüllen | O(n) | O(1) |
249
- | `translate(offset)` | Index-Translation | O(n) | O(1) |
250
- | `translate(translator)` | Index-Translation mit Translator | O(n) | O(1) |
259
+ | `sorted(comparator)` | Sortiert mit einem Vergleichsoperator | O(n log n) | O(n) |
260
+ | `sub(start, end)` | Holt einen Substream | O(n) | O(1) |
261
+ | `takeWhile(predicate)` | Holt Elemente, die die Bedingung erfüllen | O(n) | O(1) |
262
+ | `translate(offset)` | Übersetzt den Index | O(n) | O(1) |
263
+ | `translate(translator)` | Übersetzt den Index mit einem Translator | O(n) | O(1) |
251
264
 
252
265
  ```typescript
253
- // Semantic-Operationsbeispiele
254
- const result = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
255
- .filter(n => n % 2 === 0) // Filtert gerade Zahlen
256
- .map(n => n * 2) // Multipliziert mit 2
257
- .skip(1) // Überspringt erstes Element
266
+ // Beispiele für Semantic-Operationen
267
+ let result = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
268
+ .filter((n: number): boolean => n % 2 === 0) // Filtert gerade Zahlen
269
+ .map((n: number): number => n * 2) // Multipliziert mit 2
270
+ .skip(1) // Überspringt das erste
258
271
  .limit(3) // Begrenzt auf 3 Elemente
259
- .toUnordered() // Ungeordneten Collector verwenden
260
- .toArray(); // Konvertiert zu Array
272
+ .toUnordered() // Konvertiert in einen ungeordneten Collector
273
+ .toArray(); // Konvertiert in ein Array
261
274
  // Ergebnis: [8, 12, 20]
262
275
 
263
- // Komplexe Operationsbeispiele
264
- const complexResult = range(1, 100, 1)
265
- .flatMap(n => from([n, n * 2])) // Abbildet jedes Element zu zwei Elementen
276
+ // Komplexes Operationsexample
277
+ let complexResult = range(1, 100, 1)
278
+ .flatMap((n: number): Semantics<number> => from([n, n * 2])) // Mappt jedes Element auf zwei
266
279
  .distinct() // Entfernt Duplikate
267
- .shuffle() // Mischt zufällig
268
- .takeWhile(n => n < 50) // Nimmt Elemente < 50
269
- .toOrdered() // Konvertiert zu geordnetem Collector
270
- .toArray(); // Konvertiert zu Array
280
+ .shuffle() // Mischt die Reihenfolge
281
+ .takeWhile((n: number): boolean => n < 50) // Nimmt Elemente kleiner als 50
282
+ .toOrdered() // Konvertiert in einen geordneten Collector
283
+ .toArray(); // Konvertiert in ein Array
271
284
  ```
272
285
 
273
- ## Semantische Konversionsmethoden
286
+ ## Semantic Konvertierungsmethoden
274
287
 
275
- | Methode | Beschreibung | Zeitkomplexität | Platzkomplexität |
288
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
276
289
  |------------|------------|------------|------------|
277
- | `sorted()` | In geordneten Collector umwandeln | O(n log n) | O(n) |
278
- | `toUnordered()` | In ungeordneten Collector umwandeln | O(1) | O(1) |
279
- | `toOrdered()` | In geordneten Collector umwandeln | O(1) | O(1) |
280
- | `toNumericStatistics()` | In numerische Statistik umwandeln | O(n) | O(1) |
281
- | `toBigintStatistics()` | In BigInt-Statistik umwandeln | O(n) | O(1) |
282
- | `toWindow()` | In Window-Collector umwandeln | O(1) | O(1) |
283
- | `toCollectable()` | In `UnorderedCollectable` umwandeln | O(n) | O(1) |
284
- | `toCollectable(mapper)` | In benutzerdefinierten Collectable umwandeln | O(n) | O(1) |
290
+ | `sorted()` | Konvertiert in einen geordneten Collector | O(n log n) | O(n) |
291
+ | `toUnordered()` | Konvertiert in einen ungeordneten Collector | O(1) | O(1) |
292
+ | `toOrdered()` | Konvertiert in einen geordneten Collector | O(1) | O(1) |
293
+ | `toNumericStatistics()` | Konvertiert in numerische Statistiken | O(n) | O(1) |
294
+ | `toBigintStatistics()` | Konvertiert in BigInt-Statistiken | O(n) | O(1) |
295
+ | `toWindow()` | Konvertiert in einen Fenstercollector | O(1) | O(1) |
296
+ | `toCollectable()` | Konvertiert in `UnorderdCollectable` | O(n) | O(1) |
297
+ | `toCollectable(mapper)` | Konvertiert in einen benutzerdefinierten Collectable | O(n) | O(1) |
285
298
 
286
299
  ```typescript
287
- // In ein aufsteigend sortiertes Array umwandeln
300
+ // Konvertiert in ein aufsteigend sortiertes Array
288
301
  from([6,4,3,5,2]) // Erstellt einen Stream
289
302
  .sorted() // Sortiert den Stream in aufsteigender Reihenfolge
290
303
  .toArray(); // [2, 3, 4, 5, 6]
291
304
 
292
- // In ein absteigend sortiertes Array umwandeln
305
+ // Konvertiert in ein absteigend sortiertes Array
293
306
  from([6,4,3,5,2]) // Erstellt einen Stream
294
- .soted((a, b) => b - a) // Sortiert den Stream in absteigender Reihenfolge
307
+ .soted((a: number, b: number): number => b - a) // Sortiert den Stream in absteigender Reihenfolge
295
308
  .toArray(); // [6, 5, 4, 3, 2]
296
309
 
297
- // Umleiten zu einem umgekehrten Array
310
+ // Leitet um in ein umgekehrtes Array
298
311
  from([6,4,3,5,2])
299
- .redirect((element, index) => -index) // Leitet in umgekehrter Reihenfolge um
312
+ .redirect((element, index): bigint => -index) // Leitet um in umgekehrter Reihenfolge
300
313
  .toOrderd() // Behält die umgeleitete Reihenfolge bei
301
314
  .toArray(); // [2, 5, 3, 4, 6]
302
315
 
303
- // Umleitungen zum Umkehren des Arrays ignorieren
316
+ // Ignoriert Umleitungen, um ein umgekehrtes Array zu erhalten
304
317
  from([6,4,3,5,2])
305
- .redirect((element, index) => -index) // Leitet in umgekehrter Reihenfolge um
306
- .toUnorderd() // Verwirft die umgeleitete Reihenfolge. Diese Operation ignoriert die Operationen `redirect`, `reverse`, `shuffle` und `translate`
318
+ .redirect((element: number, index: bigint) => -index) // Leitet um in umgekehrter Reihenfolge
319
+ .toUnorderd() // Ignoriert die umgeleitete Reihenfolge. Diese Operation ignoriert `redirect`, `reverse`, `shuffle` und `translate` Operationen
307
320
  .toArray(); // [2, 5, 3, 4, 6]
308
321
 
309
- // Den Stream umkehren und in ein Array umwandeln
322
+ // Kehrt den Stream in ein Array um
310
323
  from([6, 4, 3, 5, 2])
311
324
  .reverse() // Kehrt den Stream um
312
325
  .toOrdered() // Garantiert die umgekehrte Reihenfolge
313
326
  .toArray(); // [2, 5, 3, 4, 6]
314
327
 
315
- // Den gemischten Stream überschreiben und in ein Array umwandeln
328
+ // Überschreibt den gemischten Stream in ein Array
316
329
  from([6, 4, 3, 5, 2])
317
330
  .shuffle() // Mischt den Stream
318
- .sorted() // Überschreibt die gemischte Reihenfolge. Diese Operation überschreibt die Operationen `redirect`, `reverse`, `shuffle` und `translate`
331
+ .sorted() // Überschreibt die gemischte Reihenfolge. Diese Operation überschreibt `redirect`, `reverse`, `shuffle` und `translate` Operationen
319
332
  .toArray(); // [2, 5, 3, 4, 6]
320
333
 
321
- // In Window-Collector umwandeln
334
+ // Konvertiert in einen Fenstercollector
322
335
  from([6, 4, 3, 5, 2]).toWindow();
323
336
 
324
- // In numerische Statistik umwandeln
337
+ // Konvertiert in numerische Statistiken
325
338
  from([6, 4, 3, 5, 2]).toNumericStatistics();
326
339
 
327
- // In BigInt-Statistik umwandeln
340
+ // Konvertiert in BigInt-Statistiken
328
341
  from([6n, 4n, 3n, 5n, 2n]).toBigintStatistics();
329
342
 
330
- // Definiert einen benutzerdefinierten Collector zur Datensammlung
343
+ // Definiert einen benutzerdefinierten Collector zum Sammeln von Daten
331
344
  let customizedCollector = from([1, 2, 3, 4, 5]).toCollectable((generator: Generator<E>) => new CustomizedCollector(generator));
332
345
  ```
333
346
 
334
- ## Collectable-Sammelmethoden
335
-
336
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
337
- |---------|-------------|-----------------|-----------------|
338
- | `anyMatch(predicate)` | Prüft auf existierende Übereinstimmung | O(n) | O(1) |
339
- | `allMatch(predicate)` | Prüft auf vollständige Übereinstimmung | O(n) | O(1) |
340
- | `count()` | Elementzählung | O(n) | O(1) |
341
- | `isEmpty()` | Prüft auf Leerheit | O(1) | O(1) |
342
- | `findAny()` | Findet beliebiges Element | O(n) | O(1) |
343
- | `findFirst()` | Findet erstes Element | O(n) | O(1) |
344
- | `findLast()` | Findet letztes Element | O(n) | O(1) |
345
- | `forEach(action)` | Iteriert über alle Elemente | O(n) | O(1) |
346
- | `group(classifier)` | Gruppiert nach Klassifikator | O(n) | O(n) |
347
- | `groupBy(keyExtractor, valueExtractor)` | Gruppiert nach Schlüssel-Wert-Extraktor | O(n) | O(n) |
348
- | `join()` | Verbindet zu String | O(n) | O(n) |
349
- | `join(delimiter)` | Verbindet mit Trennzeichen | O(n) | O(n) |
350
- | `nonMatch(predicate)` | Prüft auf keine Übereinstimmung | O(n) | O(1) |
351
- | `partition(count)` | Partitioniert nach Anzahl | O(n) | O(n) |
352
- | `partitionBy(classifier)` | Partitioniert nach Klassifikator | O(n) | O(n) |
347
+ ## Collectable Auflistungsmethoden
348
+
349
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
350
+ |------|------|------------|------------|
351
+ | `anyMatch(predicate)` | Ob irgendein Element übereinstimmt | O(n) | O(1) |
352
+ | `allMatch(predicate)` | Ob alle Elemente übereinstimmen | O(n) | O(1) |
353
+ | `count()` | Elementanzahl | O(n) | O(1) |
354
+ | `isEmpty()` | Ob es leer ist | O(1) | O(1) |
355
+ | `findAny()` | Finde ein beliebiges Element | O(n) | O(1) |
356
+ | `findFirst()` | Finde das erste Element | O(n) | O(1) |
357
+ | `findLast()` | Finde das letzte Element | O(n) | O(1) |
358
+ | `forEach(action)` | Durchlaufe alle Elemente | O(n) | O(1) |
359
+ | `group(classifier)` | Gruppiere nach Klassifizierer | O(n) | O(n) |
360
+ | `groupBy(keyExtractor, valueExtractor)` | Gruppiere nach Schlüssel-Wert-Extraktor | O(n) | O(n) |
361
+ | `join()` | Verbinde als Zeichenkette | O(n) | O(n) |
362
+ | `join(delimiter)` | Verbinde mit einem Trennzeichen | O(n) | O(n) |
363
+ | `nonMatch(predicate)` | Ob kein Element übereinstimmt | O(n) | O(1) |
364
+ | `partition(count)` | Partitioniere nach Anzahl | O(n) | O(n) |
365
+ | `partitionBy(classifier)` | Partitioniere nach Klassifizierer | O(n) | O(n) |
353
366
  | `reduce(accumulator)` | Reduktionsoperation | O(n) | O(1) |
354
- | `reduce(identity, accumulator)` | Reduktion mit Initialwert | O(n) | O(1) |
355
- | `toArray()` | Konvertiert zu Array | O(n) | O(n) |
356
- | `toMap(keyExtractor, valueExtractor)` | Konvertiert zu Map | O(n) | O(n) |
357
- | `toSet()` | Konvertiert zu Set | O(n) | O(n) |
358
- | `write(stream)` | Schreibt in Stream | O(n) | O(1) |
367
+ | `reduce(identity, accumulator)` | Reduzierung mit Anfangswert | O(n) | O(1) |
368
+ | `toArray()` | Konvertiere in ein Array | O(n) | O(n) |
369
+ | `toMap(keyExtractor, valueExtractor)` | Konvertiere in eine Map | O(n) | O(n) |
370
+ | `toSet()` | Konvertiere in eine Menge | O(n) | O(n) |
371
+ | `write(stream)` | Schreibe in einen Stream | O(n) | O(1) |
359
372
 
360
373
  ```typescript
361
- // Collectable-Operationsbeispiele
362
- const data = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
363
- .filter(n => n % 2 === 0)
374
+ // Collectable Operationsexamples
375
+ let data = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
376
+ .filter((n: number): boolean => n % 2 === 0)
364
377
  .toOrdered();
365
378
 
366
- // Übereinstimmungsprüfungen
367
- console.log(data.anyMatch(n => n > 5)); // true
368
- console.log(data.allMatch(n => n < 20)); // true
379
+ // Übereinstimmungsüberprüfungen
380
+ console.log(data.anyMatch((n: number): boolean => n > 5)); // true
381
+ console.log(data.allMatch((n: number): boolean => n < 20)); // true
369
382
 
370
- // Suchoperationen
371
- data.findFirst().ifPresent(n => console.log(n)); // 2
372
- data.findAny().ifPresent(n => console.log(n)); // Beliebiges Element
383
+ // Suchvorgänge
384
+ data.findFirst().ifPresent((n: number): void => console.log(n)); // 2
385
+ data.findAny().ifPresent((n: number): void => console.log(n)); // Ein beliebiges Element
373
386
 
374
- // Gruppierungsoperationen
375
- const grouped = data.groupBy(
376
- n => n > 5 ? "large" : "small",
377
- n => n * 2
378
- );
379
- // {small: [4, 8], large: [12, 16, 20]}
387
+ // Gruppierungsvorgänge
388
+ let grouped = data.groupBy(
389
+ (n: number): string => (n > 5 ? "groß" : "klein"),
390
+ (n: number): number => n * 2
391
+ ); // {klein: [4, 8], groß: [12, 16, 20]}
380
392
 
381
- // Reduktionsoperationen
382
- const sum = data.reduce(0, (acc, n) => acc + n); // 30
393
+ // Reduktionsvorgänge
394
+ let sum = data.reduce(0, (acc, n) => acc + n); // 30
383
395
 
384
396
  // Ausgabeoperationen
385
- data.join(", "); // "2, 4, 6, 8, 10"
397
+ data.join(", "); // "[2, 4, 6, 8, 10]"
386
398
  ```
387
399
 
388
- ## Statistische Analysemethoden
400
+ ## Statistische Analysemethode
389
401
 
390
- ### NumericStatistics-Methoden
402
+ ### NumericStatistics Methoden
391
403
 
392
- | Methode | Beschreibung | Zeitkomplexität | Raumkomplexität |
393
- |---------|-------------|-----------------|-----------------|
394
- | `range()` | Spannweite | O(n) | O(1) |
404
+ | Methode | Beschreibung | Zeitkomplexität | Speicherplatzkomplexität |
405
+ |------|------|------------|------------|
406
+ | `range()` | Bereich | O(n) | O(1) |
395
407
  | `variance()` | Varianz | O(n) | O(1) |
396
408
  | `standardDeviation()` | Standardabweichung | O(n) | O(1) |
397
409
  | `mean()` | Mittelwert | O(n) | O(1) |
398
410
  | `median()` | Median | O(n log n) | O(n) |
399
411
  | `mode()` | Modus | O(n) | O(n) |
400
412
  | `frequency()` | Häufigkeitsverteilung | O(n) | O(n) |
401
- | `summate()` | Summierung | O(n) | O(1) |
413
+ | `summate()` | Summation | O(n) | O(1) |
402
414
  | `quantile(quantile)` | Quantil | O(n log n) | O(n) |
403
415
  | `interquartileRange()` | Interquartilsabstand | O(n log n) | O(n) |
404
416
  | `skewness()` | Schiefe | O(n) | O(1) |
@@ -406,7 +418,7 @@ data.join(", "); // "2, 4, 6, 8, 10"
406
418
 
407
419
  ```typescript
408
420
  // Statistische Analysebeispiele
409
- const numbers = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
421
+ let numbers = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
410
422
  .toNumericStatistics();
411
423
 
412
424
  console.log("Mittelwert:", numbers.mean()); // 5.5
@@ -414,51 +426,48 @@ console.log("Median:", numbers.median()); // 5.5
414
426
  console.log("Standardabweichung:", numbers.standardDeviation()); // ~2.87
415
427
  console.log("Summe:", numbers.summate()); // 55
416
428
 
417
- // Statistische Analyse mit Mapper
418
- const objects = from([
429
+ // Mit Mappern statistische Analyse durchführen
430
+ let objects = from([
419
431
  { value: 10 },
420
432
  { value: 20 },
421
433
  { value: 30 }
422
434
  ]).toNumericStatistics();
423
-
424
435
  console.log("Gemappter Mittelwert:", objects.mean(obj => obj.value)); // 20
425
436
  ```
426
437
 
427
- ## Leistungsauswahlleitfaden
438
+ ## Leistungsauswahlhandbuch
428
439
 
429
- ### Ungeordneten Collector wählen (Leistungspriorität)
440
+ ### Wählen Sie einen ungeordneten Collector (Leistung zuerst)
430
441
  ```typescript
431
- // Wenn keine Reihenfolgegarantie benötigt wird
432
- const highPerformance = data
442
+ // Wenn keine Reihenfolgegarantie benötigt wird, verwenden Sie einen ungeordneten Collector für beste Leistung
443
+ let highPerformance = data
433
444
  .filter(predicate)
434
445
  .map(mapper)
435
- .toUnoredered(); // Beste Leistung
446
+ .toUnordered(); // Beste Leistung
436
447
  ```
437
448
 
438
- ### Geordneten Collector wählen (Reihenfolge benötigt)
449
+ ### Wählen Sie einen geordneten Collector (Reihenfolge erforderlich)
439
450
  ```typescript
440
- // Wenn Elementreihenfolge beibehalten werden muss
441
- const ordered = data
442
- .sorted(comparator) // Sortierung überschreibt Umleitungseffekte
443
- .toOrdered(); // Beibehaltung der Reihenfolge
451
+ // Wenn die Reihenfolge der Elemente beibehalten werden muss, verwenden Sie einen geordneten Collector
452
+ let ordered = data.sorted(comparator);
444
453
  ```
445
454
 
446
- ### Fenster-Collector wählen (Fensteroperationen)
455
+ ### Wählen Sie einen Fenstercollector (Fensteroperationen)
447
456
  ```typescript
448
- // Bei Fensteroperationsbedarf
449
- const windowed = data
457
+ // Wenn Fensteroperationen benötigt werden
458
+ let window: WindowCollectable<number> = data
450
459
  .toWindow()
451
- .slide(5n, 2n); // Gleitendes Fenster
460
+ .slide(5n, 2n); // Gleitender Fenster
452
461
  ```
453
462
 
454
- ### Statistische Analyse wählen (Numerische Berechnungen)
463
+ ### Wählen Sie eine statistische Analyse (numerische Berechnungen)
455
464
  ```typescript
456
- // Bei statistischem Analysebedarf
457
- const stats = data
458
- .toNumericStatistics(); // Numerische Statistik
465
+ // Wenn eine statistische Analyse benötigt wird
466
+ let statistics: NumericStatistics<number> = data
467
+ .toNumericStatistics(); // Numerische Statistiken
459
468
 
460
- const bigIntStats = data
461
- .toBigintStatistics(); // BigInt-Statistik
469
+ let bigIntStatistics: BigintStatistics<bigint> = data
470
+ .toBigintStatistics(); // Große Ganzzahlstatistiken
462
471
  ```
463
472
 
464
473
  [GitHub](https://github.com/eloyhere/semantic-typescript)
@@ -466,9 +475,9 @@ const bigIntStats = data
466
475
 
467
476
  ## Wichtige Hinweise
468
477
 
469
- 1. **Auswirkungen von Sortieroperationen**: In geordneten Collectors überschreibt `sorted()` die Effekte von `redirect`, `translate`, `shuffle`, `reverse`
470
- 2. **Leistungsüberlegungen**: Bei fehlender Reihenfolgeanforderung priorisiert `toUnoredered()` verwenden
471
- 3. **Speichernutzung**: Sortieroperationen benötigen O(n) zusätzlichen Speicher
472
- 4. **Echtzeitdaten**: Semantic-Streams eignen sich für Echtzeitdaten und unterstützen asynchrone Datenquellen
478
+ 1. **Auswirkungen von Sortiervorgängen**: In geordneten Collectors überschreibt der `sorted()`-Vorgang die Effekte von `redirect`, `translate`, `shuffle`, `reverse`.
479
+ 2. **Leistungserwägungen**: Wenn keine Reihenfolgegarantie benötigt wird, bevorzugen Sie die Verwendung von `toUnordered()` für eine bessere Leistung.
480
+ 3. **Speicherverwendung**: Sortiervorgänge erfordern zusätzlichen Speicherplatz von O(n).
481
+ 4. **Echtzeitdaten**: Semantic-Streams eignen sich für die Verarbeitung von Echtzeitdaten und unterstützen asynchrone Datenquellen.
473
482
 
474
- Diese Bibliothek bietet TypeScript-Entwicklern leistungsstarke und flexible Stream-Verarbeitungsfähigkeiten, die die Vorteile der funktionalen Programmierung mit Typsicherheit kombinieren.
483
+ Diese Bibliothek bietet TypeScript-Entwicklern leistungsstarke und flexible Streaming-Fähigkeiten und kombiniert die Vorteile der funktionalen Programmierung mit Typsicherheitsgarantien.