S-JIS[2024-03-22/2025-03-19] 変更履歴
Java22〜23のStreamのGatherersクラス(プレビュー版)について。
2024/3/19にリリースされたJava22で、プレビュー版としてStream用のGatherersクラスが新設された。
Streamの「汎用の終端処理であるcollectメソッド」にCollectorsクラスのメソッドを渡して使用するのと同様に、
今回追加された「汎用の中間処理であるgatherメソッド」にGatherersクラスのメソッドを渡して使用する。
Stream GatherersはJava24で正式機能になった。[2025-03-19]
GatherersはJava22〜23ではプレビュー版のクラスなので、このクラスを使いたい場合はコンパイル時にjavacコマンドに--enable-previewを付ける必要があり、
また、実行時にjavaコマンドに--enable-previewを付ける必要がある。
JShellで試す場合もjshellコマンドに--enable-previewを付ける。
> javac --enable-preview --release 22 Example.java > java --enable-preview Example
> java --enable-preview --source 22 Example.java
Gatherersクラスには、Stream#gather(Gatherer)メソッドに渡すGathererインターフェースの具象クラス(を返すメソッド)が用意されている。
import java.util.stream.Gatherers;
メソッド | ver | 戻り型 | 引数 | 説明 | 例 | ||
---|---|---|---|---|---|---|---|
コーディング | 結果 | ||||||
windowFixed |
22 | Gatherer<TR, ?, List<TR>> |
int |
windowSize |
windowSizeずつ区切ったリストに変換する。 | Stream<Integer> stream =
Stream.of(1,2,3,4,5,6,7,8); |
[[1, 2, 3], [4, 5, 6], [7, 8]] |
windowSliding |
22 | Gatherer<TR, ?, List<TR>> |
int |
windowSize |
windowSizeずつスライドしたリストに変換する。 | Stream<Integer> stream =
Stream.of(1,2,3,4,5,6,7,8); |
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8]] |
fold |
22 | Gatherer<T, ?, R> |
() -> R |
initial |
値を集約する。 (→Collectors.reducing) |
Stream<Integer> stream =
Stream.of(1,2,3,4); |
Optional[1234] |
(R, T) -> R |
folder |
||||||
scan |
22 | Gatherer<T, ?, R> |
() -> R |
initial |
Prefix Scanを実行する。 (直前の演算結果に対して演算していく) |
Stream<Integer> stream =
Stream.of(1,2,3,4); |
[1, 12, 123, 1234] |
(R, T) -> R |
scanner |
||||||
mapConcurrent |
22 | Gatherer<T, ?, R> |
int |
maxConcurrency |
仮想スレッドを使って並列に変換する。 (→Stream.map) |
Stream<String> stream =
Stream.of("a.txt", "b.txt"); |
[a.txt, b.txt] |
T -> R |
mapper |