現在、VavrというJavaの関数型ライブラリを使っているので、このVavrの使い方メモ
今回はflapMapについて
こちらの記事が参考になったので個人的なまとめ
flatMapは平坦化する
mapとのおおまかな違いは
- map(T -> R)は、Tのデータ型をRのデータ型に1:1の変換
- flatMap(T -> Stream
)は、Tのデータ型からStream に1:Nの変換
ListのListに対する平坦化
public List<String> flatMapListOfLists( List<String> a1, List<String> a2, List<String> a3, List<String> a ) { List<List<String>> listOfLists = List.of(a1, a2, a3, a4); return listOfLists.flatMap(innerList -> innerList); }
これは以下の平坦化をして新しいListを生成している
[[a, b], [c, d], [e, f, g]] → [a, b, c, d, e, f, g]
OptionのListの平坦化
public List<String> flatMapListOfOptions( Option<String> a1, Option<String> a2, Option<String> a3 ) { List<Option<String>> b = List.of(a1, a2, a3); return b.flatMap(innerOption -> innerOption); }
これはOptionをListを平坦化している
メリットとして処理が成功したもののみListに詰められる
その他
他にもTryのListの平坦化などがあるが、あまり使わなそうなので使うときがきたらまとめる