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]))); } } }
运行结果: