【发布时间】:2018-04-09 19:18:24
【问题描述】:
我想知道是否可以将 lambdas 存储在某个容器中,例如。 ArrayList 或 HashMap。 我想更改该代码:
public enum OPCODE implements BinaryOperator<Integer> {
MOV((x, y) -> y),
INC((x, y) -> ++x),
DEC((x, y) -> --x),
ADD((x, y) -> x + y),
SUB((x, y) -> x - y);
private final BinaryOperator<Integer> binaryOperator;
OPCODE(BinaryOperator<Integer> binaryOperator) {
this.binaryOperator = binaryOperator;
}
@Override
public Integer apply(Integer integer, Integer integer2) {
return binaryOperator.apply(integer, integer2);
}
}
类似于:
List<BinaryOperator<Integer>> opcodes = new ArrayList<BinaryOperator<Integer>>(){
((x, y) -> y),
((x, y) -> ++x)
};
等等
并像这样使用它:
opcodes[0].apply(a, b);
有可能吗?
【问题讨论】:
-
附带说明,您的操作
INC和DEC可能没有预期的效果,因为Java 是按值调用的,因此修改参数不会更改调用方的任何值,所以(x, y) -> ++x是一种误导性的方式来表述(x, y) -> x+1,同样(x, y) -> --x实际上是(x, y) -> x-1。 -
所以这个问题实际上只是在问 (1) 如何使用
List和 (2) 如何使用给定元素实例化ArrayList... -
@Holger 即使 IDE 也应该在那里触发警告(如果 OP 正在使用)
标签: lambda java-8 containers lookup-tables binary-operators