使用BiConsumer时如何理解Java8中的方法参考

时间:2018-09-20 04:16:28

标签: java lambda java-8 method-reference

我有一个如下的示例代码,我可以编写它并知道它的工作方式。 但是我仍然很难理解使用java ::将某物转换为典型方法的java。

.collect(ConcurrentHashMap::newKeySet,Set::add,Set::addAll)

第一个参数是Supplier<R> supplier,我可以理解,就像有一个get()方法与ConcurrentHashMap::newKeySet具有相同实现的Supplier实例一样。

第二个和第三个参数是'BiConsumer',如果我使用lambda表达式,我将编写类似(a,b)->a.add(b)的内容。当我写Set::add时,他们怎么知道先将参数a转换为Set,然后在其上调用add()方法。

BiConsumer的定义是具有两个参数的简单方法。

如果有类似的东西,我将不难理解:

Set<String> set = new HashSet<>();
Consumer<String> consumer = set::add;

我只是不明白他们怎么知道要在第一个参数上调用add方法。

0 个答案:

没有答案