kz’s blog

興味のあることについて書いていきます。

MapUtils の使い方 (Apache Commons Collections)

Java の Map 操作を Null セーフで行いたい場合、Apache Commons Collections の MapUtils を使うと良いです。

Map インスタンス

// 要素あり
Map<String, Object> map = new HashMap<>();
map.put("str", "あいう");
map.put("int", 123);
map.put("bool", true);

// 空
Map<String, Object> emptyMap = new HashMap<>();

isEmpty

MapUtils.isEmpty(map);      // false
MapUtils.isEmpty(emptyMap); // true
MapUtils.isEmpty(null);     // true

isNotEmpty

MapUtils.isNotEmpty(map);       // true
MapUtils.isNotEmpty(emptyMap);  // false
MapUtils.isNotEmpty(null);      // false

getString

MapUtils.getString(map, "str");         // あいう
MapUtils.getString(emptyMap, "str");    // null
MapUtils.getString(null, "str");        // null
MapUtils.getString(map, "int");         // 123

intを取得しようとすると自動的にStringにキャストされます。

getString(デフォルト有り)

MapUtils.getString(map, "str", "default");      // あいう
MapUtils.getString(emptyMap, "str", "default"); // default
MapUtils.getString(null, "str", "default");     // default
MapUtils.getString(map, "int", "default");      // 123

nullの場合、デフォルトに設定した値(3番目の引数)が返却される。

getInteger

MapUtils.getInteger(map, "int");        // 123
MapUtils.getInteger(emptyMap, "int");   // null
MapUtils.getInteger(null, "int");       // null
MapUtils.getInteger(map, "str");        // null

Stringを取得しようとするとintへのキャストができずnullが返却されます。(4つ目)

ちなみにキーstrに数値文字列が入っている場合はintにキャストされます。

getInteger(デフォルト有り)

MapUtils.getInteger(map, "int", 999);        // 123
MapUtils.getInteger(emptyMap, "int", 999);   // 999
MapUtils.getInteger(null, "int", 999);       // 999
MapUtils.getInteger(map, "str", 999);        // 999

nullの場合、デフォルトに設定した値(3番目の引数)が返却される。

getBoolean

MapUtils.getBoolean(map, "bool");       // true
MapUtils.getBoolean(emptyMap, "bool");  // null
MapUtils.getBoolean(null, "bool");      // null
MapUtils.getBoolean(map, "str");        // false
MapUtils.getBoolean(map, "int");        // true

Stringを取得した場合falseになります。

intを取得した場合、取得した数値によって結果が変わります。

  • 0以外 → true
  • 0 → false

getBoolean(デフォルト有り)

MapUtils.getBoolean(map, "bool", true);       // true
MapUtils.getBoolean(emptyMap, "bool", true);  // true
MapUtils.getBoolean(null, "bool", true);      // true
MapUtils.getBoolean(map, "str", true);        // false
MapUtils.getBoolean(map, "int", true);        // true

nullの場合、デフォルトに設定した値(3番目の引数)が返却される。