java字符串转lamda表达式应用
java字符串转lamda表达式应用
我们都知道在Java语言中运算符是不能作为参数来传递的,但是我们可以通过字符串转变为lamda的方式来拟实现运算符参数的传递。
思路:将运算符以字符串形式表达作为excute函数的参数传递,在函数体内实现字符串转lamda表达式,完成操作。
代码如下:
package main;
import java.util.function.Function;
import javax.script.*;
public class operator {
public static void main(String[] args) throws Exception {
int[] array = {
1,2,3,4};
excute("+",5,array);//执行加法操作
for(int a : array) {
System.out.print(a+" ");
}
System.out.print("
");
excute("-",2,array);//执行剑法操作
for(int a : array) {
System.out.print(a+" ");
}
System.out.print("
");
excute("*",2,array);//执行乘法操作
for(int a : array) {
System.out.print(a+" ");
}
System.out.print("
");
excute("%",3,array);//执行取余操作
for(int a : array) {
System.out.print(a+" ");
}
}
static void excute(Object op , int num ,int[] a) throws ScriptException {
String oper="function(x) x "+op+ " "+num;
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
@SuppressWarnings("unchecked")
Function<Object,Object> f = (Function<Object,Object>)engine.eval(
String.format("new java.util.function.Function(%s)", oper));
for (int i=0;i<a.length;i++) {
a[i]= Integer.parseInt(new java.text.DecimalFormat("0").format(f.apply(a[i])));
}
}
}
运行结果:
