はじめに:Map操作、まだ「containsKey」で書いていませんか?
JavaでMapを使うとき、以下のようなコードを書いた経験はありませんか?
Java 8以前ではこれが一般的でした。しかしJava 8では、computeIfAbsentやmergeを使うことで、こうした冗長なコードをたった1行で表現できます!
本記事では、これらのメソッドの使い方から実践例まで徹底的に解説します。
✅ computeIfAbsentとは?
🔍 役割
キーが存在しないときに初期値を生成しMapに登録する。
📌 シグネチャ
✅ 使用例:リストを保持するMapに要素を追加する場合
📉 Before(従来のコード)
📈 After(computeIfAbsentで1行に)
👉 このように、存在確認不要でスッキリ!
✅ mergeとは?
🔍 役割
指定したキーに対して、既に値がある場合は「結合処理」を行い、新規ならそのまま値を格納。
📌 シグネチャ
✅ 使用例:カウントアップ処理
📉 Before(キー存在チェックあり)
📈 After(mergeで1行)
👉 キーがなければ1を設定。あれば現在値と1を足す。美しい!
✅ computeIfAbsentとmergeの使い分け
ケース | 推奨メソッド |
---|---|
値を「初期化してから操作」したい | computeIfAbsent |
「集計・加算・結合」したい | merge |
ListやSetを使うMapに要素を追加したい | computeIfAbsent |
数値や文字列をまとめたい | merge |
✅ さらに活用例:文字列の出現回数カウント
📤 出力:
✅ Listを使ったグルーピングも簡単に!
📤 出力:
✅ まとめ:Map操作はJava 8で劇的にスマートになる!
キーワード | 内容 |
---|---|
computeIfAbsent | 値がない場合のみ初期化 |
merge | 既存値と競合処理(加算・結合など) |
メリット | if文不要・コードが短く読みやすくなる |