computeIfPresentという便利なやつ
どんな役割か
指定されたキーの値が存在していて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"));
}
}
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から追加されたようなので結構実装自体は昔ですね。
みんなもドキュメントを、読もう!(私も読みます)
Author And Source
この問題について(computeIfPresentという便利なやつ), 我々は、より多くの情報をここで見つけました https://qiita.com/NekonoNikukyu/items/911fb5fafe535e148f54著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .