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/dist/factory.d.ts +2 -1
- package/dist/factory.js +46 -26
- package/dist/guard.d.ts +3 -1
- package/dist/guard.js +12 -0
- package/dist/hook.d.ts +2 -0
- package/dist/hook.js +36 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/optional.d.ts +2 -0
- package/dist/optional.js +11 -0
- package/dist/semantic.d.ts +1 -1
- package/dist/semantic.js +1 -1
- package/dist/utility.d.ts +7 -0
- package/package.json +1 -1
- package/readme.cn.md +166 -151
- package/readme.de.md +292 -283
- package/readme.es.md +244 -241
- package/readme.fr.md +246 -235
- package/readme.jp.md +280 -268
- package/readme.kr.md +254 -248
- package/readme.md +85 -67
- package/readme.ru.md +239 -242
- package/readme.tw.md +245 -244
package/readme.jp.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Semantic-TypeScript ストリーム処理ライブラリ
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 序論
|
|
4
4
|
|
|
5
|
-
Semantic-TypeScriptは、JavaScript
|
|
5
|
+
Semantic-TypeScriptは、JavaScriptのGeneratorFunction、JavaのStream、MySQLのIndexに触発された現代的なストリーム処理ライブラリです。その中心的な設計哲学は、データインデックスを使用して効率的なデータ処理パイプラインを構築することに基づいており、フロントエンド開発のための型安全で関数型のストリーミング操作体験を提供します。
|
|
6
6
|
|
|
7
|
-
従来の同期処理とは異なり、Semantic
|
|
7
|
+
従来の同期処理とは異なり、Semanticは非同期処理モデルを採用しています。データストリームを作成する際、ターミナルがデータを受信するタイミングは、アップストリームが`accept`と`interrupt`コールバック関数を呼び出すタイミングに完全に依存します。この設計により、ライブラリはリアルタイムデータストリーム、大規模なデータセット、非同期データソースを洗練された方法で処理することができます。
|
|
8
8
|
|
|
9
9
|
## インストール
|
|
10
10
|
|
|
@@ -12,310 +12,323 @@ Semantic-TypeScriptは、JavaScript GeneratorFunction、Java Stream、MySQL Inde
|
|
|
12
12
|
npm install semantic-typescript
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## 基本的な型
|
|
16
16
|
|
|
17
17
|
| 型 | 説明 |
|
|
18
18
|
|------|-------------|
|
|
19
|
-
| `Invalid<T>` | `null
|
|
20
|
-
| `Valid<T>` | `null
|
|
21
|
-
| `MaybeInvalid<T>` | `null
|
|
19
|
+
| `Invalid<T>` | `null`または`undefined`から派生した型 |
|
|
20
|
+
| `Valid<T>` | `null`と`undefined`を除外した型 |
|
|
21
|
+
| `MaybeInvalid<T>` | `null`または`undefined`である可能性がある型 |
|
|
22
22
|
| `Primitive` | プリミティブ型の集合 |
|
|
23
|
-
| `MaybePrimitive<T>` |
|
|
24
|
-
| `OptionalSymbol` | `Optional
|
|
25
|
-
| `SemanticSymbol` | `Semantic
|
|
26
|
-
| `CollectorsSymbol` | `Collector
|
|
27
|
-
| `CollectableSymbol` | `Collectable
|
|
28
|
-
| `OrderedCollectableSymbol` | `OrderedCollectable
|
|
29
|
-
| `WindowCollectableSymbol` | `WindowCollectable
|
|
30
|
-
| `StatisticsSymbol` | `Statistics
|
|
31
|
-
| `NumericStatisticsSymbol` | `NumericStatistics
|
|
32
|
-
| `BigIntStatisticsSymbol` | `BigIntStatistics
|
|
33
|
-
| `UnorderedCollectableSymbol` | `UnorderedCollectable
|
|
34
|
-
|
|
35
|
-
##
|
|
23
|
+
| `MaybePrimitive<T>` | プリミティブ型である可能性がある型 |
|
|
24
|
+
| `OptionalSymbol` | `Optional`クラスのシンボル識別子 |
|
|
25
|
+
| `SemanticSymbol` | `Semantic`クラスのシンボル識別子 |
|
|
26
|
+
| `CollectorsSymbol` | `Collector`クラスのシンボル識別子 |
|
|
27
|
+
| `CollectableSymbol` | `Collectable`クラスのシンボル識別子 |
|
|
28
|
+
| `OrderedCollectableSymbol` | `OrderedCollectable`クラスのシンボル識別子 |
|
|
29
|
+
| `WindowCollectableSymbol` | `WindowCollectable`クラスのシンボル識別子 |
|
|
30
|
+
| `StatisticsSymbol` | `Statistics`クラスのシンボル識別子 |
|
|
31
|
+
| `NumericStatisticsSymbol` | `NumericStatistics`クラスのシンボル識別子 |
|
|
32
|
+
| `BigIntStatisticsSymbol` | `BigIntStatistics`クラスのシンボル識別子 |
|
|
33
|
+
| `UnorderedCollectableSymbol` | `UnorderedCollectable`クラスのシンボル識別子 |
|
|
34
|
+
|
|
35
|
+
## 関数指向のインターフェース
|
|
36
36
|
|
|
37
37
|
| インターフェース | 説明 |
|
|
38
|
-
|
|
39
|
-
| `Runnable` |
|
|
40
|
-
| `Supplier<R>` |
|
|
41
|
-
| `Functional<T, R>` |
|
|
42
|
-
| `BiFunctional<T, U, R>` |
|
|
43
|
-
| `TriFunctional<T, U, V, R>` |
|
|
44
|
-
| `Predicate<T>` |
|
|
45
|
-
| `BiPredicate<T, U>` |
|
|
46
|
-
| `TriPredicate<T, U, V>` |
|
|
47
|
-
| `Consumer<T>` |
|
|
48
|
-
| `BiConsumer<T, U>` |
|
|
49
|
-
| `TriConsumer<T, U, V>` |
|
|
50
|
-
| `Comparator<T>` |
|
|
51
|
-
| `Generator<T>` |
|
|
38
|
+
|-----------|-------------|
|
|
39
|
+
| `Runnable` | パラメータがなく戻り値もない関数 |
|
|
40
|
+
| `Supplier<R>` | パラメータがなく`R`を返す関数 |
|
|
41
|
+
| `Functional<T, R>` | 単一パラメータの変換関数 |
|
|
42
|
+
| `BiFunctional<T, U, R>` | 二つのパラメータの変換関数 |
|
|
43
|
+
| `TriFunctional<T, U, V, R>` | 三つのパラメータの変換関数 |
|
|
44
|
+
| `Predicate<T>` | 単一パラメータの述語関数 |
|
|
45
|
+
| `BiPredicate<T, U>` | 二つのパラメータの述語関数 |
|
|
46
|
+
| `TriPredicate<T, U, V>` | 三つのパラメータの述語関数 |
|
|
47
|
+
| `Consumer<T>` | 単一パラメータのコンシューマ関数 |
|
|
48
|
+
| `BiConsumer<T, U>` | 二つのパラメータのコンシューマ関数 |
|
|
49
|
+
| `TriConsumer<T, U, V>` | 三つのパラメータのコンシューマ関数 |
|
|
50
|
+
| `Comparator<T>` | 二つのパラメータの比較関数 |
|
|
51
|
+
| `Generator<T>` | ジェネレータ関数(コアと基盤) |
|
|
52
52
|
|
|
53
53
|
```typescript
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
// 型の使用例
|
|
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
60
|
## 型ガード
|
|
61
61
|
|
|
62
|
-
| 関数 | 説明 |
|
|
62
|
+
| 関数 | 説明 | 時間複雑度 | 空間複雑度 |
|
|
63
63
|
|------|------|------------|------------|
|
|
64
|
-
| `validate<T>(t: MaybeInvalid<T>): t is T` | 値がnullまたはundefined
|
|
65
|
-
| `invalidate<T>(t: MaybeInvalid<T>): t is null \| undefined` | 値がnullまたはundefined
|
|
66
|
-
| `isBoolean(t: unknown): t is boolean` |
|
|
67
|
-
| `isString(t: unknown): t is string` |
|
|
68
|
-
| `isNumber(t: unknown): t is number` |
|
|
69
|
-
| `isFunction(t: unknown): t is Function` |
|
|
70
|
-
| `isObject(t: unknown): t is object` |
|
|
71
|
-
| `isSymbol(t: unknown): t is symbol` |
|
|
72
|
-
| `isBigint(t: unknown): t is bigint` | BigInt
|
|
73
|
-
| `isPrimitive(t: unknown): t is Primitive` |
|
|
74
|
-
| `isIterable(t: unknown): t is Iterable<unknown>` |
|
|
75
|
-
| `isOptional(t: unknown): t is Optional<unknown>` | Optional
|
|
76
|
-
| `isSemantic(t: unknown): t is Semantic<unknown>` | Semantic
|
|
77
|
-
| `isCollector(t: unknown): t is Collector<unknown, unknown, unknown>` | Collector
|
|
78
|
-
| `isCollectable(t: unknown): t is Collectable<unknown>` | Collectable
|
|
79
|
-
| `isOrderedCollectable(t: unknown): t is OrderedCollectable<unknown>` | OrderedCollectable
|
|
80
|
-
| `isWindowCollectable(t: unknown): t is WindowCollectable<unknown>` | WindowCollectable
|
|
81
|
-
| `isUnorderedCollectable(t: unknown): t is UnorderedCollectable<unknown>` | UnorderedCollectable
|
|
82
|
-
| `isStatistics(t: unknown): t is Statistics<unknown, number \| bigint>` | Statistics
|
|
83
|
-
| `isNumericStatistics(t: unknown): t is NumericStatistics<unknown>` | NumericStatistics
|
|
84
|
-
| `isBigIntStatistics(t: unknown): t is BigIntStatistics<unknown>` | BigIntStatistics
|
|
64
|
+
| `validate<T>(t: MaybeInvalid<T>): t is T` | 値がnullまたはundefinedではないかを検証 | O(1) | O(1) |
|
|
65
|
+
| `invalidate<T>(t: MaybeInvalid<T>): t is null \| undefined` | 値がnullまたはundefinedかを検証 | O(1) | O(1) |
|
|
66
|
+
| `isBoolean(t: unknown): t is boolean` | 値がbooleanかをチェック | O(1) | O(1) |
|
|
67
|
+
| `isString(t: unknown): t is string` | 値が文字列かをチェック | O(1) | O(1) |
|
|
68
|
+
| `isNumber(t: unknown): t is number` | 値が数値かをチェック | O(1) | O(1) |
|
|
69
|
+
| `isFunction(t: unknown): t is Function` | 値が関数かをチェック | O(1) | O(1) |
|
|
70
|
+
| `isObject(t: unknown): t is object` | 値がオブジェクトかをチェック | O(1) | O(1) |
|
|
71
|
+
| `isSymbol(t: unknown): t is symbol` | 値がシンボルかをチェック | O(1) | O(1) |
|
|
72
|
+
| `isBigint(t: unknown): t is bigint` | 値がBigIntかをチェック | O(1) | O(1) |
|
|
73
|
+
| `isPrimitive(t: unknown): t is Primitive` | 値がプリミティブ型かをチェック | O(1) | O(1) |
|
|
74
|
+
| `isIterable(t: unknown): t is Iterable<unknown>` | 値が反復可能オブジェクトかをチェック | O(1) | O(1) |
|
|
75
|
+
| `isOptional(t: unknown): t is Optional<unknown>` | 値がOptionalインスタンスかをチェック | O(1) | O(1) |
|
|
76
|
+
| `isSemantic(t: unknown): t is Semantic<unknown>` | 値がSemanticインスタンスかをチェック | O(1) | O(1) |
|
|
77
|
+
| `isCollector(t: unknown): t is Collector<unknown, unknown, unknown>` | 値がCollectorインスタンスかをチェック | O(1) | O(1) |
|
|
78
|
+
| `isCollectable(t: unknown): t is Collectable<unknown>` | 値がCollectableインスタンスかをチェック | O(1) | O(1) |
|
|
79
|
+
| `isOrderedCollectable(t: unknown): t is OrderedCollectable<unknown>` | 値がOrderedCollectableインスタンスかをチェック | O(1) | O(1) |
|
|
80
|
+
| `isWindowCollectable(t: unknown): t is WindowCollectable<unknown>` | 値がWindowCollectableインスタンスかをチェック | O(1) | O(1) |
|
|
81
|
+
| `isUnorderedCollectable(t: unknown): t is UnorderedCollectable<unknown>` | 値がUnorderedCollectableインスタンスかをチェック | O(1) | O(1) |
|
|
82
|
+
| `isStatistics(t: unknown): t is Statistics<unknown, number \| bigint>` | 値がStatisticsインスタンスかをチェック | O(1) | O(1) |
|
|
83
|
+
| `isNumericStatistics(t: unknown): t is NumericStatistics<unknown>` | 値がNumericStatisticsインスタンスかをチェック | O(1) | O(1) |
|
|
84
|
+
| `isBigIntStatistics(t: unknown): t is BigIntStatistics<unknown>` | 値がBigIntStatisticsインスタンスかをチェック | O(1) | O(1) |
|
|
85
|
+
| `isPromise(t: unknown): t is Promise<unknown>` | 値がPromiseオブジェクトかをチェック | O(1) | O(1) |
|
|
86
|
+
| `isAsync(t: unknown): t is AsyncFunction` | 値がAsyncFunctionかをチェック | O(1) | O(1) |
|
|
85
87
|
|
|
86
88
|
```typescript
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
+
// 型ガードの使用例
|
|
90
|
+
let value: unknown = "hello";
|
|
89
91
|
|
|
90
92
|
if (isString(value)) {
|
|
91
|
-
console.log(value.length); // 型安全、valueはstring
|
|
93
|
+
console.log(value.length); // 型安全、valueはstringと推論される
|
|
92
94
|
}
|
|
93
95
|
|
|
94
96
|
if (isOptional(someValue)) {
|
|
95
|
-
someValue.ifPresent(
|
|
97
|
+
someValue.ifPresent((value): void => console.log(val));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if(isIterable(value)){
|
|
101
|
+
// 型安全、今やそれは反復可能なオブジェクトです。
|
|
102
|
+
for(let item of value){
|
|
103
|
+
console.log(item);
|
|
104
|
+
}
|
|
96
105
|
}
|
|
97
106
|
```
|
|
98
107
|
|
|
99
108
|
## ユーティリティ関数
|
|
100
109
|
|
|
101
|
-
| 関数 | 説明 |
|
|
110
|
+
| 関数 | 説明 | 時間複雑度 | 空間複雑度 |
|
|
102
111
|
|------|------|------------|------------|
|
|
103
|
-
| `useCompare<T>(t1: T, t2: T): number` |
|
|
104
|
-
| `useRandom<T = number \| bigint>(index: T): T` |
|
|
112
|
+
| `useCompare<T>(t1: T, t2: T): number` | 一般的な比較関数 | O(1) | O(1) |
|
|
113
|
+
| `useRandom<T = number \| bigint>(index: T): T` | 疑似乱数生成器 | O(log n) | O(1) |
|
|
105
114
|
|
|
106
115
|
```typescript
|
|
107
|
-
//
|
|
108
|
-
|
|
116
|
+
// ユーティリティ関数の使用例
|
|
117
|
+
let numbers: Array<number> = [3, 1, 4, 1, 5];
|
|
109
118
|
numbers.sort(useCompare); // [1, 1, 3, 4, 5]
|
|
110
119
|
|
|
111
|
-
|
|
112
|
-
const randomBigInt = useRandom(1000n); // BigInt乱数
|
|
120
|
+
let randomNum = useRandom(42); // シードベースの乱数
|
|
113
121
|
```
|
|
114
122
|
|
|
115
123
|
## ファクトリメソッド
|
|
116
124
|
|
|
117
|
-
### Optional
|
|
125
|
+
### Optionalのファクトリメソッド
|
|
118
126
|
|
|
119
|
-
| メソッド | 説明 |
|
|
120
|
-
|
|
127
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
128
|
+
|------|------|------------|------------|
|
|
121
129
|
| `Optional.empty<T>()` | 空のOptionalを作成 | O(1) | O(1) |
|
|
122
|
-
| `Optional.of<T>(value)` |
|
|
123
|
-
| `Optional.ofNullable<T>(value)` |
|
|
124
|
-
| `Optional.ofNonNull<T>(value)` |
|
|
130
|
+
| `Optional.of<T>(value)` | 値を含むOptionalを作成 | O(1) | O(1) |
|
|
131
|
+
| `Optional.ofNullable<T>(value)` | 可能に空のOptionalを作成 | O(1) | O(1) |
|
|
132
|
+
| `Optional.ofNonNull<T>(value)` | nullでないOptionalを作成 | O(1) | O(1) |
|
|
125
133
|
|
|
126
134
|
```typescript
|
|
127
|
-
// Optional
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
console.log(emptyOpt.
|
|
135
|
+
// 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((val: number): void => console.log(val)); // 42を出力
|
|
142
|
+
console.log(emptyOpt.get(100)); // 100を出力
|
|
135
143
|
```
|
|
136
144
|
|
|
137
|
-
### Collector
|
|
145
|
+
### Collectorのファクトリメソッド
|
|
138
146
|
|
|
139
|
-
| メソッド | 説明 |
|
|
140
|
-
|
|
141
|
-
| `Collector.full(identity, accumulator, finisher)` |
|
|
142
|
-
| `Collector.shortable(identity, interruptor, accumulator, finisher)` |
|
|
147
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
148
|
+
|------|------|------------|------------|
|
|
149
|
+
| `Collector.full(identity, accumulator, finisher)` | 完全なCollectorを作成 | O(1) | O(1) |
|
|
150
|
+
| `Collector.shortable(identity, interruptor, accumulator, finisher)` | 中断可能なCollectorを作成 | O(1) | O(1) |
|
|
143
151
|
|
|
144
152
|
```typescript
|
|
145
|
-
//
|
|
146
|
-
|
|
153
|
+
// Collectorの変換例
|
|
154
|
+
let numbers: Semantic<number> = from([3, 1, 4, 1, 5, 9, 2, 6, 5]);
|
|
147
155
|
|
|
148
|
-
//
|
|
149
|
-
|
|
150
|
-
.filter(n => n > 3)
|
|
151
|
-
.
|
|
156
|
+
// 性能優先: 未順序の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
|
-
//
|
|
154
|
-
|
|
161
|
+
// 順序が必要: 順序付けられたCollectorを使用
|
|
162
|
+
let ordered: OrderedCollectable<number> = from([3, 1, 4, 1, 5, 9, 2, 6, 5])
|
|
163
|
+
.sorted();
|
|
155
164
|
|
|
156
165
|
// 要素数をカウント
|
|
157
|
-
let count = Collector.full(
|
|
158
|
-
() => 0, // 初期値
|
|
159
|
-
(accumulator, element) => accumulator + element, //
|
|
160
|
-
(accumulator) => accumulator // 完了
|
|
166
|
+
let count: Collector<number, number, number> = Collector.full(
|
|
167
|
+
(): number => 0, // 初期値
|
|
168
|
+
(accumulator: number, element: number): number => accumulator + element, // 累積
|
|
169
|
+
(accumulator: number): number => accumulator // 完了
|
|
161
170
|
);
|
|
162
171
|
count.collect(from([1,2,3,4,5])); // ストリームからカウント
|
|
163
|
-
count.collect([1,2,3,4,5]); //
|
|
172
|
+
count.collect([1,2,3,4,5]); // 反復可能オブジェクトからカウント
|
|
164
173
|
|
|
165
|
-
let find = Collector.shortable(
|
|
166
|
-
() => Optional.empty(), // 初期値
|
|
167
|
-
(element, index, accumulator) => accumulator.isPresent(), // 中断
|
|
168
|
-
(accumulator
|
|
169
|
-
(accumulator) => accumulator // 完了
|
|
174
|
+
let find: Optional<number> = Collector.shortable(
|
|
175
|
+
(): Optional<number> => Optional.empty(), // 初期値
|
|
176
|
+
(element: number, index: bigint, accumulator: Optional<number>): Optional<number> => accumulator.isPresent(), // 中断
|
|
177
|
+
(accumulator: Optional<number>, element: number, index: bigint): Optional<number> => Optional.of(element), // 累積
|
|
178
|
+
(accumulator: Optional<number>): Optional<number> => accumulator // 完了
|
|
170
179
|
);
|
|
171
|
-
find.collect(from([1,2,3,4,5])); //
|
|
172
|
-
find.collect([1,2,3,4,5]); //
|
|
180
|
+
find.collect(from([1,2,3,4,5])); // 最初の要素を見つける
|
|
181
|
+
find.collect([1,2,3,4,5]); // 最初の要素を見つける
|
|
173
182
|
```
|
|
174
183
|
|
|
175
|
-
### Semantic
|
|
184
|
+
### Semanticのファクトリメソッド
|
|
176
185
|
|
|
177
|
-
| メソッド | 説明 |
|
|
178
|
-
|
|
179
|
-
| `
|
|
180
|
-
| `
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
184
|
-
| `interval(period, delay?)` |
|
|
185
|
-
| `iterate<E>(generator)` |
|
|
186
|
-
| `range(start, end, step)` |
|
|
187
|
-
| `websocket(websocket)` | WebSocket
|
|
186
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
187
|
+
|------|------|------------|------------|
|
|
188
|
+
| `animationFrame(period: number, delay: number = 0)` | 時間ベースのアニメーションフレームストリームを作成 | O(1)* | O(1) |
|
|
189
|
+
| `blob(blob, chunkSize)` | Blobからストリームを作成 | O(n) | O(chunkSize) |
|
|
190
|
+
| `empty<E>()` | 空のストリームを作成 | O(1) | O(1) |
|
|
191
|
+
| `fill<E>(element, count)` | 埋められたストリームを作成 | O(n) | O(1) |
|
|
192
|
+
| `from<E>(iterable)` | 反復可能オブジェクトからストリームを作成 | O(1) | O(1) |
|
|
193
|
+
| `interval(period, delay?)` | 時間ベースのインターバルストリームを作成 | O(1)* | O(1) |
|
|
194
|
+
| `iterate<E>(generator)` | ジェネレータからストリームを作成 | O(1) | O(1) |
|
|
195
|
+
| `range(start, end, step)` | 数値範囲のストリームを作成 | O(n) | O(1) |
|
|
196
|
+
| `websocket(websocket)` | WebSocketからストリームを作成 | O(1) | O(1) |
|
|
188
197
|
|
|
189
198
|
```typescript
|
|
190
|
-
// Semantic
|
|
199
|
+
// Semanticのファクトリメソッドの使用例
|
|
200
|
+
|
|
201
|
+
// 時間ベースのアニメーションフレームからストリームを作成
|
|
202
|
+
animationFrame(1000)
|
|
203
|
+
.toUnordered()
|
|
204
|
+
.forEach(frame => console.log(frame));
|
|
191
205
|
|
|
192
|
-
// Blob
|
|
206
|
+
// Blobからストリームを作成(チャンク読み取り)
|
|
193
207
|
blob(someBlob, 1024n)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
208
|
+
.toUnordered()
|
|
209
|
+
.write(WritableStream)
|
|
210
|
+
.then(callback) // ストリームの書き込み成功
|
|
211
|
+
.catch(callback); // ストリームの書き込み失敗
|
|
198
212
|
|
|
199
|
-
//
|
|
213
|
+
// 結合されるまで実行されない空のストリームを作成
|
|
200
214
|
empty<string>()
|
|
201
|
-
|
|
202
|
-
|
|
215
|
+
.toUnordered()
|
|
216
|
+
.join(); // []
|
|
203
217
|
|
|
204
|
-
//
|
|
205
|
-
|
|
218
|
+
// 埋められたストリームを作成
|
|
219
|
+
let filledStream = fill("hello", 3); // "hello", "hello", "hello"
|
|
206
220
|
|
|
207
|
-
// 初期遅延2秒、実行周期5
|
|
208
|
-
|
|
209
|
-
const intervalStream = interval(5000, 2000);
|
|
221
|
+
// 初期遅延2秒、実行周期5秒の時間ベースのストリームを作成、タイマーメカニズムに基づいて実装されています。システムスケジュールの精度制限により時間のドリフトが発生する可能性があります。
|
|
222
|
+
let intervalStream = interval(5000, 2000);
|
|
210
223
|
|
|
211
224
|
// 反復可能オブジェクトからストリームを作成
|
|
212
|
-
|
|
213
|
-
|
|
225
|
+
let numberStream = from([1, 2, 3, 4, 5]);
|
|
226
|
+
let stringStream = from(new Set(["Alex", "Bob"]));
|
|
214
227
|
|
|
215
|
-
//
|
|
216
|
-
|
|
228
|
+
// 数値範囲のストリームを作成
|
|
229
|
+
let rangeStream = range(1, 10, 2); // 1, 3, 5, 7, 9
|
|
217
230
|
|
|
218
231
|
// WebSocketイベントストリーム
|
|
219
|
-
|
|
232
|
+
let ws = new WebSocket("ws://localhost:8080");
|
|
220
233
|
websocket(ws)
|
|
221
|
-
.filter((event)=> event.type === "message") //
|
|
222
|
-
.toUnordered() //
|
|
223
|
-
.forEach((event)=> receive(event)); //
|
|
234
|
+
.filter((event): boolean => event.type === "message") // メッセージイベントのみをリッスン
|
|
235
|
+
.toUnordered() // イベントは通常順序付けられていません
|
|
236
|
+
.forEach((event): void => receive(event)); // メッセージを受信
|
|
224
237
|
```
|
|
225
238
|
|
|
226
239
|
## Semanticクラスメソッド
|
|
227
240
|
|
|
228
|
-
| メソッド | 説明 |
|
|
229
|
-
|
|
230
|
-
| `concat(other)` |
|
|
231
|
-
| `distinct()` |
|
|
232
|
-
| `distinct(comparator)` |
|
|
241
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
242
|
+
|------|------|------------|------------|
|
|
243
|
+
| `concat(other)` | 二つのストリームを結合 | O(n) | O(1) |
|
|
244
|
+
| `distinct()` | 重複を削除 | O(n) | O(n) |
|
|
245
|
+
| `distinct(comparator)` | 比較子を使用して重複を削除 | O(n²) | O(n) |
|
|
233
246
|
| `dropWhile(predicate)` | 条件を満たす要素を破棄 | O(n) | O(1) |
|
|
234
|
-
| `filter(predicate)` |
|
|
247
|
+
| `filter(predicate)` | 要素をフィルター | O(n) | O(1) |
|
|
235
248
|
| `flat(mapper)` | フラットマッピング | O(n × m) | O(1) |
|
|
236
|
-
| `flatMap(mapper)` |
|
|
237
|
-
| `limit(n)` |
|
|
249
|
+
| `flatMap(mapper)` | 新しい型にフラットマッピング | O(n × m) | O(1) |
|
|
250
|
+
| `limit(n)` | 要素数を制限 | O(n) | O(1) |
|
|
238
251
|
| `map(mapper)` | マッピング変換 | O(n) | O(1) |
|
|
239
|
-
| `peek(consumer)` |
|
|
240
|
-
| `redirect(redirector)` |
|
|
241
|
-
| `reverse()` |
|
|
242
|
-
| `shuffle()` |
|
|
243
|
-
| `shuffle(mapper)` |
|
|
252
|
+
| `peek(consumer)` | 要素を覗く | O(n) | O(1) |
|
|
253
|
+
| `redirect(redirector)` | インデックスをリダイレクト | O(n) | O(1) |
|
|
254
|
+
| `reverse()` | ストリームを逆転 | O(n) | O(1) |
|
|
255
|
+
| `shuffle()` | ランダムにシャッフル | O(n) | O(1) |
|
|
256
|
+
| `shuffle(mapper)` | マッパーを使用してシャッフル | O(n) | O(1) |
|
|
244
257
|
| `skip(n)` | 最初のn要素をスキップ | O(n) | O(1) |
|
|
245
258
|
| `sorted()` | ソート | O(n log n) | O(n) |
|
|
246
|
-
| `sorted(comparator)` |
|
|
247
|
-
| `sub(start, end)` |
|
|
259
|
+
| `sorted(comparator)` | 比較子を使用してソート | O(n log n) | O(n) |
|
|
260
|
+
| `sub(start, end)` | サブストリームを取得 | O(n) | O(1) |
|
|
248
261
|
| `takeWhile(predicate)` | 条件を満たす要素を取得 | O(n) | O(1) |
|
|
249
|
-
| `translate(offset)` |
|
|
250
|
-
| `translate(translator)` |
|
|
262
|
+
| `translate(offset)` | インデックスを変換 | O(n) | O(1) |
|
|
263
|
+
| `translate(translator)` | 変換子を使用してインデックスを変換 | O(n) | O(1) |
|
|
251
264
|
|
|
252
265
|
```typescript
|
|
253
|
-
// Semantic
|
|
254
|
-
|
|
255
|
-
.filter(n => n % 2 === 0) //
|
|
256
|
-
.map(n => n * 2) // 2
|
|
257
|
-
.skip(1) //
|
|
266
|
+
// Semantic操作の例
|
|
267
|
+
let result = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
|
268
|
+
.filter((n: number): boolean => n % 2 === 0) // 偶数をフィルター
|
|
269
|
+
.map((n: number): number => n * 2) // 2倍にする
|
|
270
|
+
.skip(1) // 最初のものをスキップ
|
|
258
271
|
.limit(3) // 3要素に制限
|
|
259
|
-
.toUnordered()
|
|
272
|
+
.toUnordered() // 順序付けられていないCollectorに変換
|
|
260
273
|
.toArray(); // 配列に変換
|
|
261
274
|
// 結果: [8, 12, 20]
|
|
262
275
|
|
|
263
|
-
//
|
|
264
|
-
|
|
265
|
-
.flatMap(n => from([n, n * 2])) //
|
|
266
|
-
.distinct() //
|
|
267
|
-
.shuffle() //
|
|
268
|
-
.takeWhile(n => n < 50) // 50
|
|
269
|
-
.toOrdered() //
|
|
276
|
+
// 複雑な操作の例
|
|
277
|
+
let complexResult = range(1, 100, 1)
|
|
278
|
+
.flatMap((n: number): Semantics<number> => from([n, n * 2])) // 各要素を二つにマッピング
|
|
279
|
+
.distinct() // 重複を削除
|
|
280
|
+
.shuffle() // 順序をシャッフル
|
|
281
|
+
.takeWhile((n: number): boolean => n < 50) // 50未満の要素を取る
|
|
282
|
+
.toOrdered() // 順序付けられたCollectorに変換
|
|
270
283
|
.toArray(); // 配列に変換
|
|
271
284
|
```
|
|
272
285
|
|
|
273
|
-
##
|
|
286
|
+
## Semanticの変換メソッド
|
|
274
287
|
|
|
275
|
-
| メソッド | 説明 |
|
|
288
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
276
289
|
|------------|------------|------------|------------|
|
|
277
|
-
| `sorted()` |
|
|
278
|
-
| `toUnordered()` |
|
|
279
|
-
| `toOrdered()` |
|
|
290
|
+
| `sorted()` | 順序付けられたCollectorに変換 | O(n log n) | O(n) |
|
|
291
|
+
| `toUnordered()` | 順序付けられていないCollectorに変換 | O(1) | O(1) |
|
|
292
|
+
| `toOrdered()` | 順序付けられたCollectorに変換 | O(1) | O(1) |
|
|
280
293
|
| `toNumericStatistics()` | 数値統計に変換 | O(n) | O(1) |
|
|
281
|
-
| `toBigintStatistics()` |
|
|
294
|
+
| `toBigintStatistics()` | BigInt統計に変換 | O(n) | O(1) |
|
|
282
295
|
| `toWindow()` | ウィンドウコレクターに変換 | O(1) | O(1) |
|
|
283
|
-
| `toCollectable()` | `UnorderdCollectable
|
|
284
|
-
| `toCollectable(mapper)` |
|
|
296
|
+
| `toCollectable()` | `UnorderdCollectable`に変換 | O(n) | O(1) |
|
|
297
|
+
| `toCollectable(mapper)` | カスタマイズされたCollectableに変換 | O(n) | O(1) |
|
|
285
298
|
|
|
286
299
|
```typescript
|
|
287
|
-
//
|
|
288
|
-
from([6,4,3,5,2]) //
|
|
289
|
-
.sorted() //
|
|
300
|
+
// 昇順に並べ替えられた配列に変換
|
|
301
|
+
from([6,4,3,5,2]) // ストリームを作成
|
|
302
|
+
.sorted() // ストリームを昇順に並べ替え
|
|
290
303
|
.toArray(); // [2, 3, 4, 5, 6]
|
|
291
304
|
|
|
292
|
-
//
|
|
293
|
-
from([6,4,3,5,2]) //
|
|
294
|
-
.soted((a, b) => b - a) //
|
|
305
|
+
// 降順に並べ替えられた配列に変換
|
|
306
|
+
from([6,4,3,5,2]) // ストリームを作成
|
|
307
|
+
.soted((a: number, b: number): number => b - a) // ストリームを降順に並べ替え
|
|
295
308
|
.toArray(); // [6, 5, 4, 3, 2]
|
|
296
309
|
|
|
297
|
-
//
|
|
310
|
+
// 逆順の配列にリダイレクト
|
|
298
311
|
from([6,4,3,5,2])
|
|
299
|
-
.redirect((element, index) => -index) //
|
|
300
|
-
.toOrderd() //
|
|
312
|
+
.redirect((element, index): bigint => -index) // 逆順にリダイレクト
|
|
313
|
+
.toOrderd() // リダイレクトされた順序を保持
|
|
301
314
|
.toArray(); // [2, 5, 3, 4, 6]
|
|
302
315
|
|
|
303
|
-
//
|
|
316
|
+
// リダイレクトを無視して逆順の配列を得る
|
|
304
317
|
from([6,4,3,5,2])
|
|
305
|
-
.redirect((element, index) => -index) //
|
|
306
|
-
.toUnorderd() //
|
|
318
|
+
.redirect((element: number, index: bigint) => -index) // 逆順にリダイレクト
|
|
319
|
+
.toUnorderd() // リダイレクトされた順序を無視します。この操作は`redirect`、`reverse`、`shuffle`、`translate`の操作を無視します
|
|
307
320
|
.toArray(); // [2, 5, 3, 4, 6]
|
|
308
321
|
|
|
309
|
-
//
|
|
322
|
+
// ストリームを逆順に配列に変換
|
|
310
323
|
from([6, 4, 3, 5, 2])
|
|
311
|
-
.reverse() //
|
|
312
|
-
.toOrdered() //
|
|
324
|
+
.reverse() // ストリームを逆順にする
|
|
325
|
+
.toOrdered() // 逆順を保証する
|
|
313
326
|
.toArray(); // [2, 5, 3, 4, 6]
|
|
314
327
|
|
|
315
|
-
//
|
|
328
|
+
// シャッフルされたストリームを上書きして配列に変換
|
|
316
329
|
from([6, 4, 3, 5, 2])
|
|
317
|
-
.shuffle() //
|
|
318
|
-
.sorted() //
|
|
330
|
+
.shuffle() // ストリームをシャッフルする
|
|
331
|
+
.sorted() // シャッフルされた順序を上書きする。この操作は`redirect`、`reverse`、`shuffle`、`translate`の操作を上書きする
|
|
319
332
|
.toArray(); // [2, 5, 3, 4, 6]
|
|
320
333
|
|
|
321
334
|
// ウィンドウコレクターに変換
|
|
@@ -324,80 +337,80 @@ from([6, 4, 3, 5, 2]).toWindow();
|
|
|
324
337
|
// 数値統計に変換
|
|
325
338
|
from([6, 4, 3, 5, 2]).toNumericStatistics();
|
|
326
339
|
|
|
327
|
-
//
|
|
340
|
+
// BigInt統計に変換
|
|
328
341
|
from([6n, 4n, 3n, 5n, 2n]).toBigintStatistics();
|
|
329
342
|
|
|
330
|
-
//
|
|
331
|
-
let customizedCollector = from([1, 2, 3, 4, 5])
|
|
343
|
+
// データ収集のためのカスタムコレクターを定義
|
|
344
|
+
let customizedCollector = from([1, 2, 3, 4, 5])
|
|
345
|
+
.toCollectable((generator: Generator<E>) => new CustomizedCollector(generator));
|
|
332
346
|
```
|
|
333
347
|
|
|
334
|
-
## Collectable
|
|
335
|
-
|
|
336
|
-
| メソッド | 説明 |
|
|
337
|
-
|
|
338
|
-
| `anyMatch(predicate)` |
|
|
339
|
-
| `allMatch(predicate)` |
|
|
340
|
-
| `count()` |
|
|
341
|
-
| `isEmpty()` |
|
|
342
|
-
| `findAny()` |
|
|
343
|
-
| `findFirst()` |
|
|
344
|
-
| `findLast()` |
|
|
345
|
-
| `forEach(action)` |
|
|
346
|
-
| `group(classifier)` |
|
|
347
|
-
| `groupBy(keyExtractor, valueExtractor)` |
|
|
348
|
-
| `join()` |
|
|
349
|
-
| `join(delimiter)` |
|
|
350
|
-
| `nonMatch(predicate)` |
|
|
351
|
-
| `partition(count)` |
|
|
352
|
-
| `partitionBy(classifier)` |
|
|
353
|
-
| `reduce(accumulator)` |
|
|
354
|
-
| `reduce(identity, accumulator)` |
|
|
355
|
-
| `toArray()` |
|
|
356
|
-
| `toMap(keyExtractor, valueExtractor)` | Map
|
|
357
|
-
| `toSet()` | Set
|
|
358
|
-
| `write(stream)` |
|
|
348
|
+
## Collectableの集約メソッド
|
|
349
|
+
|
|
350
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
351
|
+
|------|------|------------|------------|
|
|
352
|
+
| `anyMatch(predicate)` | 任意の要素が一致するかどうか | O(n) | O(1) |
|
|
353
|
+
| `allMatch(predicate)` | すべての要素が一致するかどうか | O(n) | O(1) |
|
|
354
|
+
| `count()` | 要素数 | O(n) | O(1) |
|
|
355
|
+
| `isEmpty()` | 空かどうか | O(1) | O(1) |
|
|
356
|
+
| `findAny()` | 任意の要素を見つける | O(n) | O(1) |
|
|
357
|
+
| `findFirst()` | 最初の要素を見つける | O(n) | O(1) |
|
|
358
|
+
| `findLast()` | 最後の要素を見つける | O(n) | O(1) |
|
|
359
|
+
| `forEach(action)` | すべての要素を反復する | O(n) | O(1) |
|
|
360
|
+
| `group(classifier)` | クラスファイヤーでグループ化 | O(n) | O(n) |
|
|
361
|
+
| `groupBy(keyExtractor, valueExtractor)` | キー・バリュー抽出子でグループ化 | O(n) | O(n) |
|
|
362
|
+
| `join()` | 文字列として結合 | O(n) | O(n) |
|
|
363
|
+
| `join(delimiter)` | 区切り文字を使用して結合 | O(n) | O(n) |
|
|
364
|
+
| `nonMatch(predicate)` | 一致しない要素があるかどうか | O(n) | O(1) |
|
|
365
|
+
| `partition(count)` | 数でパーティション分割 | O(n) | O(n) |
|
|
366
|
+
| `partitionBy(classifier)` | クラスファイヤーでパーティション分割 | O(n) | O(n) |
|
|
367
|
+
| `reduce(accumulator)` | 減少操作 | O(n) | O(1) |
|
|
368
|
+
| `reduce(identity, accumulator)` | 初期値を持つ減少 | O(n) | O(1) |
|
|
369
|
+
| `toArray()` | 配列に変換 | O(n) | O(n) |
|
|
370
|
+
| `toMap(keyExtractor, valueExtractor)` | Mapに変換 | O(n) | O(n) |
|
|
371
|
+
| `toSet()` | Setに変換 | O(n) | O(n) |
|
|
372
|
+
| `write(stream)` | ストリームに書き込む | O(n) | O(1) |
|
|
359
373
|
|
|
360
374
|
```typescript
|
|
361
|
-
// Collectable
|
|
375
|
+
// Collectableの操作例
|
|
362
376
|
const data = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
|
363
|
-
.filter(n => n % 2 === 0)
|
|
377
|
+
.filter((n: number): boolean => n % 2 === 0)
|
|
364
378
|
.toOrdered();
|
|
365
379
|
|
|
366
380
|
// 一致チェック
|
|
367
|
-
console.log(data.anyMatch(n => n > 5)); // true
|
|
368
|
-
console.log(data.allMatch(n => n < 20)); // true
|
|
381
|
+
console.log(data.anyMatch((n: number): boolean => n > 5)); // true
|
|
382
|
+
console.log(data.allMatch((n: number): boolean => n < 20)); // true
|
|
369
383
|
|
|
370
384
|
// 検索操作
|
|
371
|
-
data.findFirst().ifPresent(n => console.log(n)); // 2
|
|
372
|
-
data.findAny().ifPresent(n => console.log(n)); // 任意の要素
|
|
385
|
+
data.findFirst().ifPresent((n: number): void => console.log(n)); // 2
|
|
386
|
+
data.findAny().ifPresent((n: number): void => console.log(n)); // 任意の要素
|
|
373
387
|
|
|
374
388
|
// グループ化操作
|
|
375
389
|
const grouped = data.groupBy(
|
|
376
|
-
n => n > 5 ? "
|
|
377
|
-
n => n * 2
|
|
378
|
-
);
|
|
379
|
-
// {small: [4, 8], large: [12, 16, 20]}
|
|
390
|
+
(n: number): string => (n > 5 ? "大" : "小"),
|
|
391
|
+
(n: number): number => n * 2
|
|
392
|
+
); // {小: [4, 8], 大: [12, 16, 20]}
|
|
380
393
|
|
|
381
|
-
//
|
|
394
|
+
// 減少操作
|
|
382
395
|
const sum = data.reduce(0, (acc, n) => acc + n); // 30
|
|
383
396
|
|
|
384
397
|
// 出力操作
|
|
385
|
-
data.join(", "); // "2, 4, 6, 8, 10"
|
|
398
|
+
data.join(", "); // "[2, 4, 6, 8, 10]"
|
|
386
399
|
```
|
|
387
400
|
|
|
388
401
|
## 統計分析メソッド
|
|
389
402
|
|
|
390
403
|
### NumericStatisticsメソッド
|
|
391
404
|
|
|
392
|
-
| メソッド | 説明 |
|
|
393
|
-
|
|
405
|
+
| メソッド | 説明 | 時間複雑度 | 空間複雑度 |
|
|
406
|
+
|------|------|------------|------------|
|
|
394
407
|
| `range()` | 範囲 | O(n) | O(1) |
|
|
395
408
|
| `variance()` | 分散 | O(n) | O(1) |
|
|
396
409
|
| `standardDeviation()` | 標準偏差 | O(n) | O(1) |
|
|
397
|
-
| `mean()` |
|
|
410
|
+
| `mean()` | 平均 | O(n) | O(1) |
|
|
398
411
|
| `median()` | 中央値 | O(n log n) | O(n) |
|
|
399
412
|
| `mode()` | 最頻値 | O(n) | O(n) |
|
|
400
|
-
| `frequency()` |
|
|
413
|
+
| `frequency()` | 頻度分布 | O(n) | O(n) |
|
|
401
414
|
| `summate()` | 合計 | O(n) | O(1) |
|
|
402
415
|
| `quantile(quantile)` | 分位数 | O(n log n) | O(n) |
|
|
403
416
|
| `interquartileRange()` | 四分位範囲 | O(n log n) | O(n) |
|
|
@@ -405,11 +418,11 @@ data.join(", "); // "2, 4, 6, 8, 10"
|
|
|
405
418
|
| `kurtosis()` | 尖度 | O(n) | O(1) |
|
|
406
419
|
|
|
407
420
|
```typescript
|
|
408
|
-
//
|
|
409
|
-
|
|
421
|
+
// 統計分析の例
|
|
422
|
+
let numbers = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
|
410
423
|
.toNumericStatistics();
|
|
411
424
|
|
|
412
|
-
console.log("
|
|
425
|
+
console.log("平均:", numbers.mean()); // 5.5
|
|
413
426
|
console.log("中央値:", numbers.median()); // 5.5
|
|
414
427
|
console.log("標準偏差:", numbers.standardDeviation()); // ~2.87
|
|
415
428
|
console.log("合計:", numbers.summate()); // 55
|
|
@@ -420,53 +433,52 @@ const objects = from([
|
|
|
420
433
|
{ value: 20 },
|
|
421
434
|
{ value: 30 }
|
|
422
435
|
]).toNumericStatistics();
|
|
423
|
-
|
|
424
|
-
console.log("マップされた平均値:", objects.mean(obj => obj.value)); // 20
|
|
436
|
+
console.log("マッピングされた平均:", objects.mean(obj => obj.value)); // 20
|
|
425
437
|
```
|
|
426
438
|
|
|
427
439
|
## パフォーマンス選択ガイド
|
|
428
440
|
|
|
429
|
-
###
|
|
441
|
+
### 順序を保証しないCollectorを選択(パフォーマンス優先)
|
|
430
442
|
```typescript
|
|
431
|
-
//
|
|
432
|
-
|
|
443
|
+
// 順序の保証が不要な場合、最高のパフォーマンスを得るために順序付けられていないCollectorを使用します
|
|
444
|
+
let highPerformance = data
|
|
433
445
|
.filter(predicate)
|
|
434
446
|
.map(mapper)
|
|
435
|
-
.
|
|
447
|
+
.toUnordered(); // 最高のパフォーマンス
|
|
436
448
|
```
|
|
437
449
|
|
|
438
|
-
###
|
|
450
|
+
### 順序が必要なCollectorを選択(順序が必要)
|
|
439
451
|
```typescript
|
|
440
|
-
//
|
|
441
|
-
|
|
452
|
+
// 要素の順序を維持する必要がある場合、順序付けられたCollectorを使用します
|
|
453
|
+
let ordered = data.sorted(comparator);
|
|
442
454
|
```
|
|
443
455
|
|
|
444
|
-
###
|
|
456
|
+
### ウィンドウ操作が必要なCollectorを選択(ウィンドウ操作)
|
|
445
457
|
```typescript
|
|
446
458
|
// ウィンドウ操作が必要な場合
|
|
447
|
-
|
|
459
|
+
let window: WindowCollectable<number> = data
|
|
448
460
|
.toWindow()
|
|
449
461
|
.slide(5n, 2n); // スライディングウィンドウ
|
|
450
462
|
```
|
|
451
463
|
|
|
452
|
-
###
|
|
464
|
+
### 数値計算が必要な統計分析を選択(統計分析)
|
|
453
465
|
```typescript
|
|
454
466
|
// 統計分析が必要な場合
|
|
455
|
-
|
|
467
|
+
let statistics: NumericStatistics<number> = data
|
|
456
468
|
.toNumericStatistics(); // 数値統計
|
|
457
469
|
|
|
458
|
-
|
|
459
|
-
.toBigintStatistics(); //
|
|
470
|
+
let bigIntStatistics: BigintStatistics<bigint> = data
|
|
471
|
+
.toBigintStatistics(); // 大きな整数統計
|
|
460
472
|
```
|
|
461
473
|
|
|
462
474
|
[GitHub](https://github.com/eloyhere/semantic-typescript)
|
|
463
475
|
[NPMJS](https://www.npmjs.com/package/semantic-typescript)
|
|
464
476
|
|
|
465
|
-
##
|
|
477
|
+
## 重要な注意事項
|
|
466
478
|
|
|
467
|
-
1.
|
|
468
|
-
2.
|
|
469
|
-
3.
|
|
470
|
-
4.
|
|
479
|
+
1. **ソート操作の影響**:順序付けられたCollectorでは、`sorted()`操作は`redirect`、`translate`、`shuffle`、`reverse`の効果を上書きします。
|
|
480
|
+
2. **パフォーマンスの考慮**:順序の保証が不要な場合は、`toUnordered()`を使用してパフォーマンスを向上させることをお勧めします。
|
|
481
|
+
3. **メモリ使用量**:ソート操作には追加のO(n)のメモリが必要です。
|
|
482
|
+
4. **リアルタイムデータ**:Semanticストリームはリアルタイムデータの処理に適しており、非同期データソースをサポートしています。
|
|
471
483
|
|
|
472
|
-
このライブラリは、TypeScript
|
|
484
|
+
このライブラリは、TypeScript開発者に強力で柔軟なストリーミング機能を提供し、関数型プログラミングの利点と型安全性の保証を組み合わせています。
|