package com.bugyun.service.impl;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;import com.bugyun.rule.CalculateRule;import com.bugyun.service.ICalculateService;import com.googlecode.aviator.AviatorEvaluator;public class CalculateImpl extends ICalculateService { public Long sum(List strList) { Map env = new HashMap (); String sumName = CalculateRule.SUM; env.put(CalculateRule.LIST, strList); Object result = AviatorEvaluator.execute(sumName, env, true); return Long.valueOf(result.toString()); } @Override public List sort(List strList) { Map env = new HashMap (); env.put(CalculateRule.LIST, strList); String sortName = CalculateRule.SORT; Object result = AviatorEvaluator.execute(sortName, env, true);// Arrays.asList(result) 返回的是一个List > List sortList = (List)Arrays.asList(result).get(0); return sortList; }}
CalculateRule.java
package com.bugyun.rule;public class CalculateRule { public final static String LIST = "list"; public final static String SUM = new StringBuilder("reduce(").append(LIST).append(",+,0)").toString() ; public final static String SORT = new StringBuilder("sort(").append(LIST).append(")").toString() ;}
CalculateException.java
package com.bugyun.exception;public class CalculateException extends Exception{ public CalculateException() { super(); } public CalculateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } public CalculateException(String message, Throwable cause) { super(message, cause); } public CalculateException(String message) { super(message); } public CalculateException(Throwable cause) { super(cause); }}
ErrorCode.java
package com.bugyun;/** * 项目名称:aviator-test * 类名称:ErrorCode.java * 类描述: * 创建人:beyond * 创建时间:2016-3-31 下午5:28:33 * 修改人: * 修改时间: * 修改备注: * @version */public class ErrorCode { public final static String CALCULATE_MAX = "90101"; // 规则计算: 最大值失败 public final static String CALCULATE_MIN = "90102"; // 规则计算:最小值失败 public final static String CALCULATE_SUM = "90103"; // 规则计算:求和失败 public final static String CALCULATE_SORT = "90104"; // 规则计算:排序失败}
CalculateTest.java
package com.bugyun.test;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Collections;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import com.bugyun.exception.CalculateException;import com.bugyun.service.ICalculateService;import com.bugyun.service.impl.CalculateImpl;import com.googlecode.aviator.AviatorEvaluator;/** * 项目名称:aviator-test * 类名称:CalculateTest.java * 类描述: * 创建人:beyond * 创建时间:2016-3-31 下午5:30:05 * 修改人: * 修改时间: * 修改备注: * @version */public class CalculateTest { public static void main(String[] args) throws CalculateException { List ints = new ArrayList(); // 测试集合大小 Long size = 1000000L ; for(int i=0 ; i sortList = calculate.sort(ints);// System.out.println("==========> sortList : " + sortList); System.out.println("==========> sortList : " ); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date())+"\n" ); Long sum = (long) calculate.sum(ints); System.out.println("==========> sum : " + sum); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) +"\n" ); Object max = calculate.max(sortList); System.out.println("==========> max : " + max); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) +"\n" ); int min = calculate.min(sortList); System.out.println("==========> min : " + min); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) ); }}