当前位置:  开发笔记 > 编程语言 > 正文

为什么Map.compute()采用BiFunction

如何解决《为什么Map.compute()采用BiFunction》经验,为你挑选了1个好方法。

我不明白为什么Map.compute(),并Map.computeIfPresent()采取BiFunction参数以及Map.computeIfAbsent()一个Function:

V compute(K key, BiFunction remappingFunction) V computeIfPresent(K key, BiFunction remappingFunction) V computeIfAbsent(K key, Function mappingFunction)

我期待一个普通的Function,将旧值映射到一个新值,resp.a Supplier为新值.调用者已经拥有密钥(第一个参数),因此函数或供应商已经可以使用它.我找到的所有例子都不使用密钥.我想到的原因:

关键必须(有效)final- 这很容易管理

有一些花哨的易用方法参考

但我不相信这些是这种设计的可行原因.你有什么想法?



1> Holger..:

你可能会看到computeIfPresent单入口挂件replaceAll而后者需要将键作为参数,但是支持与两个操作的输入相同的功能是很自然的,并且API 在这里是一致的:它总是将键作为参数提供给函数.

通常,提供密钥提高了现有功能的可重用性,无论是方法引用还是接口的普通class实现(即非lambda)BiFunction.但是,考虑到现有的JRE实现,这种可重用性也可能影响lambda表达式的性能:

如此处所述,从周围上下文捕获值的lambda表达式可能最终出现在每个捕获过程的单个实例中,而仅使用其参数(非捕获lambdas)的lambda表达式最终将作为单例实例.相反,具有否则未使用的参数不会对性能产生影响.因此,接收密钥作为参数也是优选的.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有