Java Lambda函数转化为双消费函数
我正在努力弄清楚这是怎么回事。Java Lambda函数转化为双消费函数,java,lambda,Java,Lambda,我正在努力弄清楚这是怎么回事。 我将列出我相信正在发生的事情,希望有人能告诉我我在某些地方错了。或者告诉我如何/为什么这样做 公共双消费者累加器(){ 返回列表::添加; } 一种称为accumulator的方法,它不接受任何内容并返回一个双消费者方法 累加器返回对列表上下文中的add方法的引用,作为BiConsumer 列表上的实际add方法实际上是一个函数,接受T并返回一个布尔值 这就是我进入猜测领域的地方 它在List的实例上调用add方法,该列表是BiConsumer的第一个参数 我知
我将列出我相信正在发生的事情,希望有人能告诉我我在某些地方错了。或者告诉我如何/为什么这样做
公共双消费者累加器(){
返回列表::添加;
}
累加器
返回对列表
上下文中的add
方法的引用,作为BiConsumer
列表上的实际add
方法实际上是一个函数
,接受T
并返回一个布尔值
List
的实例上调用add
方法,该列表是BiConsumer
的第一个参数李>
我知道它一定在做
公共双消费者累加器(){
返回(列表、项目)->list.add(i);
}
我知道它可以忽略add
方法的返回类型,因此它可以假装函数
是消费者
但是我只是不理解黑魔法,它使
双消费者
在双消费者
的第一个参数的实例上运行消费者
或函数
,这不是黑魔法。这是明确规定的
以下是对特定类型的任意对象的实例方法的引用示例:
String[] stringArray = { "Barbara", "James", "Mary", "John",
"Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
方法引用String::compareTognoreCase
的等效lambda表达式将具有形式参数列表(字符串a,字符串b)
,其中a和b是用于更好地描述此示例的任意名称。方法引用将调用方法a.compareToIgnoreCase(b)
当您有类似于
SomeType::instanceMethod
的内容时,可以将其转换为接受两个参数的函数,第一个参数是调用该方法的实例。它可以,因为语言规范这么说。soFunction
方法可以转化为BiFunctions
以及BiConsumers
。很高兴知道。@ WORMSS,如果你认为我的答案回答你的问题,请考虑接受它!嗯,您的答案是,因为语言规范这么说。
。。不是最伟大的。。你的回答告诉了我一些我不知道的事情,但并不是最好的答案。。所以我将等待,看看是否有人可以添加到它。@Worms那么你想知道什么?编译器是如何工作的?要查看编译器的源代码吗?