Java Lambda表达式参数/声明

Java Lambda表达式参数/声明,java,function,math,lambda,expression,Java,Function,Math,Lambda,Expression,我已经注册了一段时间,除非我真的找不到答案,否则通常不会发帖。现在,我觉得自己被卡住了 我最近才开始熟悉java Lambda表达式(主要是函数表达式),如BinaryOperator和Bifunction…)我正在查看这些表达式的源代码,我看到您将它们声明为,例如: public interface BiFunction<T, U, R> {...}. 公共接口双功能{…}。 因此,在我看来,没有办法动态创建一个接口(类似于双函数),而是在运行时设置一些参数和“等式” 我将给出

我已经注册了一段时间,除非我真的找不到答案,否则通常不会发帖。现在,我觉得自己被卡住了

我最近才开始熟悉java Lambda表达式(主要是函数表达式),如BinaryOperator和Bifunction…)我正在查看这些表达式的源代码,我看到您将它们声明为,例如:

public interface BiFunction<T, U, R> {...}.
公共接口双功能{…}。
因此,在我看来,没有办法动态创建一个接口(类似于双函数),而是在运行时设置一些参数和“等式”

我将给出一个实际的例子,我认为这将更好地解释我想解决的问题类型:

假设我想制作一个程序,用户可以在其中输入一个数学函数,并在一个点上对其进行计算。首先,假设它是一个单变量函数,因此:

Function<Integer,Integer> f1 = (x) -> Math.pow(x,2);
函数f1=(x)->Math.pow(x,2);
将是问题的解决方案,除了我在运行前定义函数f(x)=x^2。 我想知道是否有一种方法可以在运行时创建一个函数,询问用户希望输入哪个函数

如果用户可以输入具有多个参数的方程,那么这个问题可能会更加复杂

谢谢你的帮助


Max

你需要的是咖喱。给定一个函数
f
,它接受参数
a
b
c
,您可以定义一个当前版本的
f
,它接受参数
a
,并吐出一个函数
g
,它接受参数
b
c
。继续咖喱过程,您将只需要担心3种情况:

  • 零参数。调用函数
  • 一个论点。使用给定参数调用函数
  • 两个或更多的论点。Curry函数,并重新求值,因为Curry函数的算术数将减少

  • 所以,如果你想使用lambda,你需要定义一个lambda来实现一个函数。当然,您可能还需要为运行时想要支持的任何代数定义相关运算符,但这可能是一个固定符号表(也可能被定义为函数的hastable/Lambda带参数)。

    感谢您的回答,我将研究Java中的curry。