Java 检查ConcurrentHashMap的ComputeFabSent是否更改了某些内容

Java 检查ConcurrentHashMap的ComputeFabSent是否更改了某些内容,java,java.util.concurrent,Java,Java.util.concurrent,您如何知道ConcurrentHashMap的函数ComputeFabSent必须调用给定的生成器方法(“mappingFunction”)? 从Javadoc中,我相信它会返回新的值(如果生成了一个值),并返回旧的值(如果存在)。我可以从lambda生成器函数设置一个外部标志,但这会很尴尬…您可以使用compute: map.compute(key, (k, v) -> v == null ? /*absent*/ this::getValue : /*present*/ v); 并添

您如何知道ConcurrentHashMap的函数ComputeFabSent必须调用给定的生成器方法(“mappingFunction”)?

从Javadoc中,我相信它会返回新的值(如果生成了一个值),并返回旧的值(如果存在)。我可以从lambda生成器函数设置一个外部标志,但这会很尴尬…

您可以使用
compute

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

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

2个向上投票、2个向下投票、1个fav和一个4个向上投票的答案:这是一个颇具争议的问题!但我没有收到任何评论。保持优雅,Stackoverflow。如果这里有反对票,我必须说这是完全免费的。问得好。