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])));
    	}
    }
}

运行结果:

经验分享 程序员 微信小程序 职场和发展