こんばんは。
エキサイト株式会社の中尾です。
JavaのOptionalを使ってnull判定のif分岐を極力減らす方法をご紹介します。
if分岐を減らす一つの方法として、
- mapを使う (戻り値有り)
- ifPresentOrElseを使う (戻り値なし)
の2種類があります。
以下、コード例です。
package main.java.poc; import java.util.Optional; public class OptionalPoc { public static void main(String[] args) { Optional<String> hello = Optional.of("HELLO"); Optional<String> world = Optional.empty(); System.out.println("*** ifを使った書き方 ***"); if (hello.isEmpty()) { System.out.println("hello は nullだよ"); } else { System.out.println("hello は " + hello.get() + "あるよ"); } if (world.isEmpty()) { System.out.println("world は nullだよ"); } else { System.out.println("world は " + world.get() + "あるよ"); } System.out.println(""); System.out.println("*** mapを使った書き方 mapは戻り値を持つ ***"); final String s = hello .map(e -> { final String e1 = e; return "hello は " + e1 + "だよ"; }) .orElse("hello は nullだよ"); System.out.println(s); final String s1 = world .map(e -> { final String e1 = e; return "world は " + e1 + "だよ"; }) .orElse("world は nullだよ"); System.out.println(s1); System.out.println(""); System.out.println("*** ifPresentOrElseを使った書き方 ifPresentOrElseは戻り値なし ***"); hello.ifPresentOrElse( e -> { System.out.println("hello は " + e + "あるよ"); }, () -> { System.out.println("hello は nullだよ"); } ); world.ifPresentOrElse( e -> { System.out.println("world は " + e + "あるよ"); }, () -> { System.out.println("world は nullだよ"); } ); } }
実行結果
*** ifを使った書き方 *** hello は HELLOあるよ world は nullだよ *** mapを使った書き方 mapは戻り値を持つ *** hello は HELLOだよ world は nullだよ *** ifPresentOrElseを使った書き方 ifPresentOrElseは戻り値 void *** hello は HELLOあるよ world は nullだよ
注意点として、ifPresentOrElseは戻り値がありません。 もちろんこれだけではありませんし、コードの可読性が100%上がるわけではないのでケースバイケースで使ってください。
なにかの参考になれば幸いです。