使用双消费者时如何理解Java8中的方法引用

使用双消费者时如何理解Java8中的方法引用,java,lambda,java-8,method-reference,Java,Lambda,Java 8,Method Reference,我有下面这样的示例代码,我可以编写它,并且知道它的工作原理。 但我仍然很难理解java是如何使用::将某些东西转换为典型方法的 .collect(ConcurrentHashMap::newKeySet,Set::add,Set::addAll) 第一个参数是Supplier-Supplier,我可以理解为有一个Supplier实例,它的get()方法具有与ConcurrentHashMap::newKeySet相同的实现 第二个和第三个参数是'BiConsumer',如果我使用lambda表

我有下面这样的示例代码,我可以编写它,并且知道它的工作原理。 但我仍然很难理解java是如何使用::将某些东西转换为典型方法的

.collect(ConcurrentHashMap::newKeySet,Set::add,Set::addAll)
第一个参数是
Supplier-Supplier
,我可以理解为有一个Supplier实例,它的
get()
方法具有与
ConcurrentHashMap::newKeySet
相同的实现

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

双消费者的定义是一种简单的双参数方法

如果有类似的情况,我不会觉得难以理解:

Set<String> set = new HashSet<>();
Consumer<String> consumer = set::add;
Set Set=newhashset();
消费者=集合::添加;
我无法理解他们如何知道在第一个参数上调用add方法