Java Lambda函数转化为双消费函数

Java Lambda函数转化为双消费函数,java,lambda,Java,Lambda,我正在努力弄清楚这是怎么回事。 我将列出我相信正在发生的事情,希望有人能告诉我我在某些地方错了。或者告诉我如何/为什么这样做 公共双消费者累加器(){ 返回列表::添加; } 一种称为accumulator的方法,它不接受任何内容并返回一个双消费者方法 累加器返回对列表上下文中的add方法的引用,作为BiConsumer 列表上的实际add方法实际上是一个函数,接受T并返回一个布尔值 这就是我进入猜测领域的地方 它在List的实例上调用add方法,该列表是BiConsumer的第一个参数 我知

我正在努力弄清楚这是怎么回事。
我将列出我相信正在发生的事情,希望有人能告诉我我在某些地方错了。或者告诉我如何/为什么这样做

公共双消费者累加器(){
返回列表::添加;
}
  • 一种称为accumulator的方法,它不接受任何内容并返回一个双消费者方法
  • 累加器
    返回对
    列表
    上下文中的
    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
    的内容时,可以将其转换为接受两个参数的函数,第一个参数是调用该方法的实例。它可以,因为语言规范这么说。

    so
    Function
    方法可以转化为
    BiFunctions
    以及
    BiConsumers
    。很高兴知道。@ WORMSS,如果你认为我的答案回答你的问题,请考虑接受它!嗯,您的答案是
    ,因为语言规范这么说。
    。。不是最伟大的。。你的回答告诉了我一些我不知道的事情,但并不是最好的答案。。所以我将等待,看看是否有人可以添加到它。@Worms那么你想知道什么?编译器是如何工作的?要查看编译器的源代码吗?