S-JIS[2024-03-22] 変更履歴

Stream Gatherers(Java22)

Java22のStreamのGatherersクラス(プレビュー版)について。


概要

2024/3/19にリリースされたJava22で、プレビュー版としてStream用のGatherersクラスが新設された。

Streamの「汎用の終端処理であるcollectメソッド」にCollectorsクラスのメソッドを渡して使用するのと同様に、
今回追加された「汎用の中間処理であるgatherメソッド」にGatherersクラスのメソッドを渡して使用する。


GatherersはJava22ではプレビュー版のクラスなので、このクラスを使いたい場合はコンパイル時に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

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);
List<List<Integer>> list = stream.gather(Gatherers.windowFixed(3)).toList();
[[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);
List<List<Integer>> list = stream.gather(Gatherers.windowSliding(3)).toList();
[[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<StringBuilder> sbOpt = stream.gather(Gatherers.fold(StringBuilder::new, (sb, n) -> sb.append(n))).findFirst();
Optional[1234]
(R, T) -> R folder
scan 22 Gatherer<T, ?, R> () -> R initial Prefix Scanを実行する。
(直前の演算結果に対して演算していく)
Stream<Integer> stream = Stream.of(1,2,3,4);
List<String> list = stream.gather(Gatherers.scan(() -> "", (prev, n) -> prev + n)).toList();
[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");
List<Path> list = stream.gather(Gatherers.mapConcurrent(2, Path::of)).toList();
[a.txt, b.txt]
T -> R mapper

プレビュー機能へ戻る / Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま