公式ドキュメントでは
Stream flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。
要するに
以下の手順で処理される
1. Stream内のオブジェクトを受け取りStreamに変換
2. 変換された各Streamを1つのStreamにまとめる
例
abcde
が出力される
Arrays.asList("a,b,c", "d,e")
.flatMap(str -> Arrays.stream(str.split(','))
.forEach(str -> System.out.print(str));
※2重リストから作られる Stream<List<List<String>>
であれば、mapping関数の引数(上の例でstr)はListになるが、Listでなくてもよい。