概要
Mapに値を保持しておいて、
既にMapに値があれば、そちらを使うように実装した時の話です。
その際、
Map#put()がputした値をそのまま返却してくれず、
理想通りに書けなかったという、つまり愚痴です
(具体的にはソースコード参照 )
※もしかすると、
スマートな解決方法はあるかもしれませんし、
ただの勘違いかもしれません
ソースコード
Main.java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// 理想(こう書きたい)
String idealKey = "idealKey";
Map<String, String> idealMap = new HashMap<String, String>();
String idealValue = Optional.ofNullable(
idealMap.get(idealKey)
).orElseGet(
// putはnullを返す…
() -> idealMap.put(idealKey, "idealValue")
);
System.out.println("get:" + idealValue);
// 現実(こう書くことになった)
String realKey = "realKey";
Map<String, String> realMap = new HashMap<String, String>();
String realStr = Optional.ofNullable(
realMap.get(realKey)
).orElseGet(() -> {
String value = "realValue";
realMap.put(realKey, value);
return value;
});
System.out.println("get:" + realStr);
}
}
##実行結果
get:null
get:realValue