检查 ConcurrentHashMap 的 computeIfAbsent 是否改变了什么

Tra*_*chs 4 java java.util.concurrent

你怎么知道 ConcurrentHashMap 的函数 computeIfAbsent 必须调用给定的生成器方法(“mappingFunction”)?
从 Javadoc 我相信它会返回新值(如果生成了一个值,如果存在则返回旧值)。我可以从 lambda 生成器函数设置一个外部标志,但这会很尴尬......

ass*_*ias 5

你可以compute改用:

map.compute(key, (k, v) -> v == null ? /*absent*/ this::getValue : /*present*/ v);
Run Code Online (Sandbox Code Playgroud)

并添加一些逻辑来检查调用了哪个分支。