LoginSignup
5
5

More than 5 years have passed since last update.

JavaでNull安全なMapの値を取得する

Posted at

本記事の目的

JavaではつきもののNull Pointer Exceptionですが、なるべく安全に値を取得したく、今回はMapの値の取得方法を試してみました。

検証の対象となるMap

Map<String, Boolean> map = new HashMap<String, Boolean>() {
  {
    put("true_label", true);
    put("false_label", false);
    put("null_label", null);
  }
};

普通にMap#get

assertTrue(map.get("true_label"));
assertFalse(map.get("false_label"));

assertNull(map.get("null_label"));
assertNull(map.get("invalid_label")); // Mapに存在しないキー

Java8のMap#getOrDefault

キーがなかった場合に代替値を取得することができます。

assertTrue(map.getOrDefault("true_label", false));
assertFalse(map.getOrDefault("false_label", false));
assertFalse(map.getOrDefault("invalid_label", false)); // キーがなかった場合の代替値を取得できます。

assertNull(map.getOrDefault("null_label", false)); // 残念ながらfalseにはなってくれない!!

Java8のOptional#ofNullable

assertTrue(Optional.ofNullable(map.get("true_label")).orElse(false));
assertFalse(Optional.ofNullable(map.get("false_label")).orElse(false));
assertFalse(Optional.ofNullable(map.get("null_label")).orElse(false)); // 代替値 falseになる
assertFalse(Optional.ofNullable(map.get("invalid_label")).orElse(false)); // 代替値 falseになる

Apache.commons.lang3のObjectUtils#defaultIfNull

Optionalでいいかもしれませんが念のため

assertTrue(ObjectUtils.defaultIfNull(map.get("true_label"), false));
assertFalse(ObjectUtils.defaultIfNull(map.get("false_label"), false));
assertFalse(ObjectUtils.defaultIfNull(map.get("null_label"), false)); // 代替値 falseになる
assertFalse(ObjectUtils.defaultIfNull(map.get("invalid_label"), false)); // 代替値 falseになる
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5