【问题标题】:Usage of BiConsumer interface in java 8java 8中BiConsumer接口的使用
【发布时间】:2021-10-27 22:15:18
【问题描述】:

我是使用流和函数式接口编程的新手,java.util.function.BiConsumer 描述了方法 accept,如下面的文档中不清楚

void accept(T t,
            U u)
Performs this operation on the given arguments.
Parameters:
t - the first input argument
u - the second input argument

函数接口可以使用下面的 lamda 表达式来引用

BiConsumer<String,String> a=(a,b)->{
 
}

但是“这个操作在这里的确切含义”是什么意思。提前致谢

【问题讨论】:

    标签: java java-8 functional-interface


    【解决方案1】:

    但是这里的“这个操作”到底是什么意思呢?

    BiConsumer 接口实际上是任何函数的签名,该函数接受两个引用类型的两个参数(或者在您的示例中,相同类型)并且不返回任何内容。符合此接口的函数可以对它们做任何事情。它可以打印它们。它可以将它们添加到一些地图中。它可以……把它们扔掉,什么也不做。

    “this 操作”指的是(实际上)实现接口的 lambda。或者更准确地说,lambda 做了什么

    所以...基本上...当您将 lambda 作为 BiConsumer 类型的参数传递给某个方法时,该方法可以调用 accept(arg1, arg2) 并且 预计它会按照javadoc所说的去做;即将 lambda(或其他)实现的“操作”应用于这两个参数。

    现在BiConsumer 接口有点不寻常,因为它不返回任何内容。所以它不像其他功能接口那样被广泛使用。但是,如果您正在寻找示例,请尝试以下操作:

    【讨论】:

      【解决方案2】:

      请注意,BiConsumer 表示采用 2 个参数的“操作”。

      例如,如果你有

      BiConsumer<String,String> foo = (a, b) -> System.out.println(a + b);
      

      foo 表示操作System.out.println(a + b); - 打印连接在一起的两个参数。

      “本次操作”只表示BiConsumer实例所代表的操作。

      所以在上面的示例中,foo 的“此操作”仅表示“System.out.println(a + b);”。

      文档说如果你调用accept,就会执行实例所代表的操作(对于foo,就是System.out.println(a + b);)。

      【讨论】:

        猜你喜欢
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多