1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

computeIfPresentという便利なやつ

Posted at

どんな役割か

指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。
関数がnullを返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。

なるほど。

コードで見る

  • 使わなかった場合
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("hoge", "hoge");
        map.put("fuga", "fuga");
        map.put("piyo", "piyo");
        
        if (map.get("piyo") != null) {
            map.put("piyo", "piyopiyo");
        }
        
        System.out.println(map.get("piyo"));
    }
}

piyoというキーがmapあったら、それに対応するバリューをpiyopiyoにします。

  • 使った場合
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("hoge", "hoge");
        map.put("fuga", "fuga");
        map.put("piyo", "piyo");
        
        map.computeIfPresent("piyo", (k, v) -> "piyopiyo");
        
        System.out.println(map.get("piyo"));
    }
}

やっていることはさっきと同じですが、スッキリしますね。
余計なif文が無いのは素晴らしいことです。

  • こんな事もできる
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("hoge", "hoge");
        map.put("fuga", "fuga");
        map.put("piyo", "piyo");
        
        map.computeIfPresent("piyo", (k, v) -> {
            if (v.equals("piyo")) {
                return "piyopiyo";
            }
            return "piyo";
        });
        
        System.out.println(map.get("piyo"));
    }
}

piyoというキーがmapにあった場合、もしそのバリューがpiyoであればpiyopiyoに上書きします。
バリューがpiyoではなかった場合はpiyoに上書きします。

まとめ

コードレビューでこれを使ったほうがキレイになるよ。と指摘された内容ですが、知らないメソッドだったので備忘録としてまとめました。
Java8から追加されたようなので結構実装自体は昔ですね。
みんなもドキュメントを、読もう!(私も読みます)

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?