UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Vavr】Javaの関数型ライブラリVavrのflapMap

現在、VavrというJavaの関数型ライブラリを使っているので、このVavrの使い方メモ

今回はflapMapについて

こちらの記事が参考になったので個人的なまとめ

blog.softwaremill.com

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の平坦化などがあるが、あまり使わなそうなので使うときがきたらまとめる