三浦ノート

自分の経験したことを検索可能にしていくブログ.誰かの役に立ってくれれば嬉しいです.

java.util.stream.Stream<T>.flatMap() の使い方

JavaのStreamAPIにあるflatMapメソッドを使ってみます。

定義

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

簡単のために、ワイルドカードをその境界の型に書き直して考えてみます。

<R> Stream<R> flatMap(Function<T, Stream<R>> mapper)

引数にはFunction<T, Stream<R>>型インスタンスを渡します。つまり、Stream<R> apply(T)のメソッド定義をラムダ式で渡せばいいです。

そして、flatMapの返り値もStream<R>型です。Stream<Stream<R>>みたいに入れ子になっていないことに注意してください。

flatMapとは何か

mapper.apply(T)が返したStream<R>型インスタンスのR型要素を、全て1つのStream<R>に追加してくれるメソッドです。

使用例

Stream<String> stm = Stream.of("a", "b", "c");
stm.flatMap(x -> Stream.of(x , x)).forEach(x -> System.out.print(x + " "));
// a a b b c c