使用ScriptEngine 通过实体类和计算公式 计算结果
其中有用到 ScriptEngine JSONObject hashMap iterator
public class Contents{
private Integer score1;
private Integer score2;
private Integer score3;
public Integer getScore1() {
return score1;
}
public void setScore1(Integer score1) {
this.score1 = score1;
}
public Integer getScore2() {
return score2;
}
public void setScore2(Integer score2) {
this.score2 = score2;
}
public Integer getScore3() {
return score3;
}
public void setScore3(Integer score3) {
this.score3 = score3;
}
}
@Test
public void test(){
//规则
String rule="score1+score2";
//计算参数
String[] params={"score1","score2"};
//实体类
Contents contents=new Contents();
contents.setScore1(1);
contents.setScore2(2);
contents.setScore3(3);
//对象转json
JSONObject jsonObj = JSONObject.fromObject(contents);
//
//ScriptEngineManager manager = new ScriptEngineManager();
//通过文件扩展名获取脚本引擎
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
//将参数和实体类中的值 封装到hash中
Map<String,Object> paramValues = new HashMap<String,Object>();
for(String param:params){
paramValues.put(param,JsonUtils.getParamValue(jsonObj,param));
}
//将hash转成集合 便于循环遍历
Iterator<String> keys=paramValues.keySet().iterator();
//将key和value 封装到脚本引擎中
while(keys.hasNext()){
String key = keys.next();
if(engine.get(key)==null){
engine.put(key, paramValues.get(key));
}
}
//脚本引擎通过rule的计算公式 计算结果
try {
Object calcValue = engine.eval(rule);
} catch (ScriptException e) {
}
}