Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的Lambda参数_Java_Lambda_Java 8 - Fatal编程技术网

java中的Lambda参数

java中的Lambda参数,java,lambda,java-8,Java,Lambda,Java 8,我的问题是如何将lambda表达式作为函数中的参数?? 我的意图是,当我执行sum方法时,方法accept中的参数被对象延拓使用(我说得对吗??),我的疑问是,我该如何使这个对象延拓成为一个lambda表达式,它使用value1+value2的结果,然后再执行其他操作 比如X.sum(1,2,resultosum->{system.out.println(resultosum);}) (我已经试过了,eclipse把它当作一个错误) 对不起,我的英语不太好 这是我的密码 public class

我的问题是如何将lambda表达式作为函数中的参数?? 我的意图是,当我执行sum方法时,方法accept中的参数被对象延拓使用(我说得对吗??),我的疑问是,我该如何使这个对象延拓成为一个lambda表达式,它使用value1+value2的结果,然后再执行其他操作

比如
X.sum(1,2,resultosum->{system.out.println(resultosum);})

(我已经试过了,eclipse把它当作一个错误)

对不起,我的英语不太好

这是我的密码

public class ExampleClass {

    public static void main(String[] args) {

        X x = new X();

        int nro ;

        x.sum(1,2,"AN EXAMPLE OF LAMBDA"));

    }

}

public class X{

    public void sum(int value1,int value2,Consumer<Integer> continuation)
    {
        continuation.accept(value2+value1);
    }}
公共类示例类{
公共静态void main(字符串[]args){
X=新的X();
国际自然资源组织;
x、 sum(1,2,“LAMBDA的一个示例”);
}
}
公共X类{
公共作废金额(整数值1、整数值2、消费者续集)
{
继续。接受(值2+1);
}}

有趣的是,您当前的lambda表达式将适用于此(除非对
system.out.println的打字错误进行修复)。下面只是一个更简洁的表达方式

实际上,您正在编写一个方法,该方法接受两个值,生成一个值,并将其放置在某种消费者中。该使用者可以是一个集合、一些可以处理结果的函数或另一个对象

让我们暂时把lambdas从方程中去掉,用一个匿名类写出这个

x.sum(1, 2, new Consumer<Integer>() {
    @Override
    public void accept(final Integer value) {
        // what should go here?
    }
});
现在,这有点道理了——我们将两个数字的结果相加,然后将结果打印到屏幕上

让我们把lambdas放回调料中。这可以用λ表示,如下所示:

x.sum(1, 2, System.out::println);

实际上,不管我们得到的结果值是什么,我们都希望允许
println
方法使用它。

我想我理解您的意图。在你的问题中,重要的是要理解“我们希望作为Lambda传递的行为是什么?”。在您的案例中,这个问题的答案是“打印传递给Lambda/消费者实例的总和的值”

为了实现这一点,我们需要创建一个Lambda实例来进行打印,然后将其传递给X.sum方法。下面是实现相同功能的代码

//ExampleClass.java
import java.util.function.Consumer;
public class ExampleClass {
  public static void main(String[] args) {
    X x = new X();
    Consumer<Integer> consumerInstance=(value) -> System.out.println("Summation Result is ->value");
    x.sum(1, 2, consumerInstance);
  }
 }

//X.java
import java.util.function.Consumer;
public class X{
  public void sum(int value1,int value2,Consumer<Integer> continuation){
    continuation.accept(value1+value2);
  }
}
//ExampleClass.java
导入java.util.function.Consumer;
公共类示例类{
公共静态void main(字符串[]args){
X=新的X();
Consumer consumerInstance=(value)->System.out.println(“求和结果为->值”);
x、 总和(1,2,1);
}
}
//X.java
导入java.util.function.Consumer;
公共X类{
公共作废金额(整数值1、整数值2、消费者续集){
继续。接受(值1+值2);
}
}
有关Lambda表达式的基本理解,请参考此链接-


(注:www.javabrahman.com是我拥有的一个科技博客。)

我在你的主X.sum(1,2,“LAMBDA的一个例子”)中看到了一个额外的);可能是这个吗?是的,有,但我没有粘贴代码,是我写的。我需要一些lambda的示例来使用它。我放了“”来显示lambda可以匹配的内容。可以使用lambda表达式
value->System.out.println()
或方法引用
System.out::println
。在
value->System.out::println
这样的表达式中同时使用这两个表达式,在需要
消费者的上下文中是错误的。顺便说一下,我建议用
IntConsumer
替换
Consumer
value->System.out::println
不应该compile@FedericoPeraltaSchaffner:谢谢你接电话。我已经更新了我的答案。奇怪……它一定是在Java8的早期版本上工作的,因为我可能会将它放入IntelliJ中进行验证。
//ExampleClass.java
import java.util.function.Consumer;
public class ExampleClass {
  public static void main(String[] args) {
    X x = new X();
    Consumer<Integer> consumerInstance=(value) -> System.out.println("Summation Result is ->value");
    x.sum(1, 2, consumerInstance);
  }
 }

//X.java
import java.util.function.Consumer;
public class X{
  public void sum(int value1,int value2,Consumer<Integer> continuation){
    continuation.accept(value1+value2);
  }
}