lambda - 如何在 Java 8 中传递带有参数的 lambda 表达式作为参数?

标签 lambda java-8 functional-interface

这是我尝试过的。它甚至不编译。

public class LambdaExample {

    public static Integer handleOperation(Integer x, Integer y,  Function converter){
                return converter.apply(x,y);
    }

    public static void main(String[] args){
         handleOperation(10,10, Operation::add);
    }

}

class Operation {

    public int add(Integer x, Integer y){
        return x+y;
    }

}

我在这里尝试实现/学习的几件事是:

1) 如何将 lambda expression 作为方法参数传递(在上面的 main 方法中)

2)如何给函数传递参数(在handleOpertion方法中,存在compilation错误,apply只带一个参数)

最佳答案

您的 handleOperation 方法采用一个实现 Function 的对象, Operation::add (方法引用)不符合条件。此外,对于两个参数,您需要改用 BiFunction

这是一个应该有效的示例:

public class LambdaExample {

    public static Integer handleOperation(Integer x, Integer y,  BiFunction<Integer, Integer, Integer> converter){
                return converter.apply(x,y);
    }

    public static void main(String[] args){
         handleOperation( 10,10, new Operation() ); // should return 20
    }

}

class Operation implements BiFunction<Integer, Integer, Integer> {

    public Integer apply(Integer x, Integer y){
        return x+y;
    }

}

更新:
public class LambdaExample {

    public static Integer handleOperation(Integer x, Integer y,  BiFunction<Integer, Integer, Integer> converter){
                return converter.apply(x,y);
    }

    public static void main(String[] args){
         handleOperation( 10,10, Operation::add ); // should return 20
    }

}

class Operation {

    public static int add(Integer x, Integer y){
        return x+y;
    }

}

关于lambda - 如何在 Java 8 中传递带有参数的 lambda 表达式作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494261/

相关文章:

java - Lambda 表达式 java 8 异常 : java. lang.NoSuchMethodError : java. lang.invoke.LambdaMetafactory.metaFactory

C++:如何在启动时创建类的集合

java - 仅使用带有 lambda 的 Collection.sort() 对对象列表进行排序

android - 订阅后一次性对象为空

java - 如何在 Kotlin 中将函数式接口(interface)操作作为参数传递?

java - 当我尝试使用 BiCionsumer 从列表中删除值时,它不起作用

lambda - Scheme - Lambda 作为一个坏的函数对象

Java 8 lambda : Can I generate a new ArrayList of objects from an IntStream?

Java 8 谓词根据元素属性从列表中选择元素

c++ - constexpr 构造函数的参数类型 'std::function' 不是文字类型