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