背景
既存のレガシーコードを改善していく過程で、IntelliJからの警告を減らすようにしていました。
その際に「Mapに対してkeyの値がnullだった場合、値を設定する」という処理があったのですが、それに対するIntelliJからの指摘が勉強になったので、今回記事にしました。
具体例(before)
例えば以下のような都道府県名と県庁所在地を持つMapが存在していたとします。
Map<String, String> prefectures = new HashMap<>();
prefectures.put("茨城県", "水戸");
prefectures.put("栃木県", "宇都宮");
prefectures.put("群馬県", null);
現在、key群馬県はvalueがnullになっており、ここに値を設定したいとします。
この時既存の実装では以下のような方法で値を設定していました。
if (prefectures.get("群馬県") == null) {
prefectures.put("群馬県", "前橋");
}
この方法に対してIntelliJはputIfAbsentメソッドでよりシンプルに書けると提案してくれました。
具体例(After)
putIfAbsentメソッドはまさに上記のようなkeyがnullだった場合に値を設定してくれるメソッドで、このメソッドを用いると、先ほどの例のようなif文はなくなり、
prefectures.putIfAbsent("群馬県", "前橋");
と1行でスッキリ書くことができます。
このメソッドの存在を知らなかったので、簡単ではありますが、こうして今回記事にしました。
まとめ
「Mapに対してkeyの値がnullだった場合、値を設定する」という処理をする場合、if文を使わなくてもputIfAbsentメソッドを用いればスッキリと書くことができます。
今回このような提案までしてくれるIntelliJは凄いと改めて思いましたが、こうした便利なメソッドをどのように知れば良いのだろうかとも思いました。
「JavaDocで調べるついでに眺めてみる」、「JDKのリリースノートを読む」以外に良い方法があれば、ご教示いただけますと幸いです。
少しでもこの記事が誰かの役に立てば幸いです。最後までお読みいただきありがとうございました。