我是从Python转来的,现在正在尝试理解Java中lambda表达式的不同之处。在Python中,您可以做如下操作:
opdict = { "+":lambda a,b: a+b, "-": lambda a,b: a-b,
"*": lambda a,b: a*b, "/": lambda a,b: a/b }
sum = opdict["+"](5,4)
我该如何在Java中实现类似的功能?我已经阅读了一些关于Java lambda表达式的内容,似乎我需要先声明一个接口,但我不清楚为什么需要这样做以及如何实现。
编辑:我尝试使用自定义接口自己完成。下面是我尝试的代码:
Map<String, MathOperation> opMap = new HashMap<String, MathOperation>(){
{ put("+",(a,b)->b+a);
put("-",(a,b)->b-a);
put("*",(a,b)->b*a);
put("/",(a,b)->b/a); }
};
...
...
interface MathOperation {
double operation(double a, double b);
}
然而,这会出现错误:
目标类型必须是一个函数式接口。
我应该在哪里声明接口?
IntBinaryOperator
可能会稍微好一些。 - Paul BoddingtonMap.of("+", (x, y) -> x + y, "-", ...
时,它将几乎与Python版本一样简短。 - Paul Boddington